It’s the same in the the standard c library, so Java is being consistent with a real programming language…
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)
So why not return a long or whatever the 64 bit int equivalent is?
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).
But there’s really no point in flooring a double outside of the range where integers can be represented accurately, is there.
Logic, in math, if you have a real and you round it, it’s always a real not an integer. If we follow your mind with abs(-1) of an integer it should return a unsigned and that makes no sense.
in math, if you have a real and you round it, it’s always a real not an integer.
No, that’s made up. Outside of very specific niche contexts the concept of a number having a single well-defined type isn’t relevant in math like it is in programming. The number 1 is almost always considered both an integer and a real number.
If we follow your mind with abs(-1) of an integer it should return a unsigned and that makes no sense.
How does that not make sense? abs is always a nonnegative integer value, why couldn’t it be an unsigned int?
Makes sense, how would you represent
floor(1e42
) orceil(1e120)
as integer? It would not fit into 32bit (unsigned) or 31bit (signed) integer. Not even into 64bit integer.BigInt (yeah, not native everywhere)
I feel this is worse than double though because it’s a library type rather than a basic type but I guess ceil and floor are also library functions unlike toInt