this post was submitted on 05 Aug 2023
541 points (92.5% liked)

Programmer Humor

19714 readers
103 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 50 points 1 year ago (3 children)

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)

[–] [email protected] 8 points 1 year ago (2 children)

So why not return a long or whatever the 64 bit int equivalent is?

[–] [email protected] 5 points 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).

[–] [email protected] 4 points 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 (?)

[–] [email protected] 4 points 1 year ago

But there's really no point in flooring a double outside of the range where integers can be represented accurately, is there.

[–] [email protected] 2 points 1 year ago (2 children)
[–] [email protected] 6 points 1 year ago (1 children)
[–] [email protected] 3 points 1 year ago (1 children)

yeah that would be pretty effective. could also go to three just to be safe

[–] [email protected] 2 points 1 year ago

Make it four, just to be even

[–] [email protected] 2 points 1 year ago