But there’s really no point in flooring a double outside of the range where integers can be represented accurately, is there.
Comment on Java
korstmos@kbin.social 1 year ago
Doubles have a much higher max value than ints, so if the method were to convert all doubles to ints they would not work for double values above 2^31-1.
(It would work, but any value over 2^31-1 passed to such a function would get clamped to 2^31-1)
parlaptie@feddit.de 1 year ago
affiliate@lemmy.world 1 year ago
what about using two ints
idunnololz@lemmy.world 1 year ago
What about two
int64_t
affiliate@lemmy.world 1 year ago
yeah that would be pretty effective. could also go to three just to be safe
hariette@artemis.camp 1 year ago
Make it four, just to be even
korstmos@kbin.social 1 year ago
A BigDecimal?
karlthemailman@sh.itjust.works 1 year ago
So why not return a long or whatever the 64 bit int equivalent is?
whats_a_refoogee@sh.itjust.works 1 year ago
To avoid a type conversion that might not be expected. Integer math in Java differs from floating point math.
Math.floor(10.6) / Math.floor(4.6) = 2.5 (double)
If floor returned a long, then
Math.floor(10.6) / Math.floor(4.6) = 2 (long)
If your entire code section is working with doubles, you might not like finding Math.floor() unexpectedly creating a condition for integer division and messing up your calculation. (Have fun debugging this if you’re not actively aware of this behavior).
korstmos@kbin.social 1 year ago
Because even a long (64-bit int) is too small :)
A long can hold 2^64-1 = 1.84E19
A double can hold 1.79E308
Double does some black magic with an exponent, and can hold absolutely massive numbers!
Double also has some situations that it defines as "infinity", a concept that does not exist in long as far as I know (?)