4 ms·
1/0 = 0 is usually not a practical thing, it's to satisfy that the output of the division operator stays in the type and you don't want crashes (a "feature" of
by throwawaymaths 2y ago
1/0 = 0 is usually not a practical thing, it's to satisfy that the output of the division operator stays in the type and you don't want crashes (a "feature" of ponylang and gleam, e.g.). Its kind of a PL wonk thing.
It's not at all a good idea for very important practical reasons as I outline in a reply to parent.
- ncruces 2y agoI don't want to handle errors after every division and division doesn't crash, both sound rather practical, though.
- AlotOfReading 2y agoThe original purpose of defining it to be Nan/INF in floating point was exactly that. You'd do all the work and then check if it was Nan/INF at the end without having to check every intermediate result.
- eru 2y agoIf you want to do all the work at the end, 'exceptions' do exactly that, too.
- davorak 2y agoThrowing an exception in a function normally stops the rest of the work that function would do. That is not the case when using Inf and similar > const f = (x) => [x/2, x/0] undefined > f(10) [ 5, Infinity ]
- NBJack 2y agoI assert stopping immediately is much more practical. In many cases, you waste considerable amounts of processing power to reach a conclusion you often won't be able to use.
- eru 2y agoIt depends on your use case.
- throwawaymaths 2y agoSure but what should be the default?
- eru 2y agoRust and Haskell can solve this fairly well: both styles of dealing with errors are easily accessible. Go solves this really badly. As for specifically what to do about division: the right default depends on your application. Either way is defensible, and I would rather work on making it easy to pick either style in the language of your choice, than to worry too much about what the default should be.
- eru 2y agoThat's a good point, sometimes this is what you want.
- Cpoll 2y agoThe problem is that if you forget to check you find out a month later or ten functions over.
- throwawaymaths 2y ago> I don't want to handle errors after every division and division doesn't crash. You can have one or the other. You can't have both without the risk of nasal demons. Unless the result of the operation is business-safe to throw away. That's why having the default / have both is an poor design choice by gleam and pony. Someone will reach for / and encounter demons. Afaict the other langs that do this are not intended for real world prod use. By default / should force the developer into either crashable or unwrap error return. If you want some sort of opt-in "logic-unsafe /", fine but call it something else like </> e.g.
- cassepipe 2y agoFunny you should mention gleam since it's a BEAM host language... surely they shouldn't fear crash management, right ?
- throwawaymaths 2y agoYou would think. Some people get scarred working in other langs and can't let go, I guess?
- IIAOPSW 2y agoWell, if the requirement is to stay in the type, you could extend the type to include the point at infinity. That satisfies both programmer and the mathematician. https://en.wikipedia.org/wiki/Projectively_extended_real_line https://en.wikipedia.org/wiki/Projectively_extended_real_lin...