On Wednesday, 7 September 2016 at 15:15:03 UTC, John Colvin wrote:
python3 uses / for floating point division and // for integer. I really like the distinction, although I would prefer if / was disallowed on integer operands entirely, i.e. 3/2.0 is ok but 3/2 is not, that would be an error and you'd have to do 3 // 2
Personally I agree. A more nuanced solution is filed here: https://issues.dlang.org/show_bug.cgi?id=12452 At the end of the description, Don is quoted:
It is indeed a common floating-point bug. I came up with a solution for this a couple of years ago, never got around to doing a pull request, but it's on the newsgroup somewhere. It's a little extension to the range propagation implementation. You add a boolean flag to the range, which indicates 'a fractional part has been discarded'. This flag gets set whenever you perform an integer division (or integer exponentiation with a negative power), and is cleared whenever there is a cast or a bitwise operation. Then, disallow implicit casting from integer to floating point whenever the fractional bit is set. Catches all these kinds of bugs, doesn't require any changes to the language.
