Also because if you are dealing with a double, then you’re probably dealing with multiple, or doing math that may produce a double. So returning a double just saves some effort.
Comment on Java
RoyaltyInTraining@lemmy.world 1 year ago
Makes sense, cause double can represent way bigger numbers than integers.
fsxylo@sh.itjust.works 1 year ago
pomodoro_longbreak@sh.itjust.works 1 year ago
Yeah it makes sense to me. You can always cast it if you want an int that bad. Hell just wrap the whole function with your own if it means that much to you
(Not you, but like a hypothetical person)
disencentivized@programming.dev 1 year ago
Why not just return a long?
RoyaltyInTraining@lemmy.world 1 year ago
A double can represent numbers up to ± 1.79769313486231570x10^308, or roughly 18 with 307 zeroes behind it. You can’t fit that into a long, or even 128 bits. Even though rounding huge doubles is pointless, since only the first dozen digits or so are saved, using any kind of Integer would lead to inconsistencies, and thus potentially bugs.
Beanie@programming.dev 1 year ago
doubles can hold numbers way larger than even 64-bit ints
thegamer@burggit.moe 1 year ago
A double could also be NaN and any operations with NaN should return NaN afaik
karlthemailman@sh.itjust.works 1 year ago
How does that work? Is it just because double uses more bits? I’d imagine for the same number of bits, you can store more ints than doubles (assuming you want the ints to be exact values).
nile@sopuli.xyz 1 year ago
No, it has an exponent component: …wikipedia.org/…/Double-precision_floating-point_…
karlthemailman@sh.itjust.works 1 year ago
No, I get that. I’m sure the programming language design people know what they are doing. I just don’t can’t grasp how a double (which has to use at least 1 bit to represent whether or not there is a fractional component) can possibly store more exact integer vales than an integer type of the same length (same number of bits).
It just seems to violate some law of information theory to my novice mind.
whats_a_refoogee@sh.itjust.works 1 year ago
It doesn’t. A double is a 64 bit value while an integer is 32 bit. A long is a 64 bit signed integer which stores more exact integer numbers than a double.
EvilHankVenture@lemmy.world 1 year ago
It doesn’t store more bit for bit, but it can store larger values.
unawareallium@sh.itjust.works 1 year ago
You can think of a double as having a fixed precision, but, in contrast to an integer, this precision can be moved over the decimal point depending on the value you want to represent. Therefore, despite representing floating-point numbers, a double still has discrete steps determined by its binary representation of 64 bits. If the value of a double gets larger, it reaches a point where the smallest difference between two subsequent doubles is greater than one. For float (32 bit), you reach this point at 16777216. The next larger number to be represented as a float is 16777218 (i.e., +2).
Here is a nice online tool that demonstrates this (and contains much more information on the encoding of floating-point numbers): www.h-schmidt.net/FloatConverter/IEEE754.html
nile@sopuli.xyz 1 year ago
Oh now I get what you mean, and like others mentioned, yeah it’s more bits :)
Akagigahara@lemmy.world 1 year ago
I would need to look into the exact difference of double vs integer to know, but a partially educated guess is that they are referring to Int32 vs double and not Int64, aka long. I did a small search and saw that double uses 32 bits for the whole numbers and the others for the decimal.
towerful@programming.dev 1 year ago
I’m going to guess here (cause I feel this community is for learning)…
Integers have exactness. Doubles have range.
So ifMAX_INT + 1
is possible, then~(MAX_INT + 1)
is probably preferable to an overflow or silentMIN_INT
.But
Math.ceil
probably expects a float, because it is dealing with decimals (or similar). If it was an int, rounding wouldn’t be required.
So ifMath.ceil
returned and integer, then it could parse a float larger than INT_MAX, which would overflow an int (so error, or overflow). Or just return a float
lysdexic@programming.dev 1 year ago
Also, double can and does in fact represent integers exactly.
Killing_Spark@feddit.de 1 year ago
Only to 2^54. The amount of integers representable by a long is more. But it can and does represent every int value correctly
parlaptie@feddit.de 1 year ago
*long long, if we’re gonna be taking about C types. A long is commonly limited to 32 bits.
Aux@lemmy.world 1 year ago
C is irrelevant because this post is about Java and in Java long is 64 bits.
vox@sopuli.xyz 1 year ago
you should never be using these types in c anyway,
(u?)int(8/16/32/64)_t
and are