If I have a java float
and I want to increment/decrement it by the minumim possible value how can I determine that value? I mean it is a difference if the value of the float is already a very large number like 3.4028235E38 or a very small number like 1.4E-45. In the first case to note any difference I need to subtract a far lager number as I would need to add to the second case right?
Asked
Active
Viewed 1,256 times
0

KIC
- 5,887
- 7
- 58
- 98
-
1Real numbers which are exactly representable by double-precision floats are not uniformly distributed on the real line. What is the minimum possible difference between any two floats and what are the differences between a specific float and the two closest representable real numbers are two different questions. Perhaps the following classic paper will help: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – John Coleman Oct 14 '17 at 09:22
-
@JohnColeman excatly so the question really is, what is the closest next bigger/smaller number I can get? Will check this paper thx. – KIC Oct 14 '17 at 09:33
-
I'm voting to close this as a duplicate (since it is), but you might enjoy the following, somewhat less technical source: http://www.volkerschatz.com/science/float.html – John Coleman Oct 14 '17 at 09:36
-
You could using something like fvalue = float.intBitsToFloat(float.floattointbits(fvalue)+1). – rcgldr Oct 14 '17 at 09:42
-
4@rcgldr that's a long and ugly way to write `Java.lang.Math.nextAfter`, and it goes in the opposite direction for negative numbers. – Pascal Cuoq Oct 14 '17 at 09:43
-
@PascalCuoq - it was just an example to show the function names. The actual code should store the reinterpreted float into a integer, then check the sign bit, increment or decrement (or other adjustment) accordingly, check for exponent underflow / overflow, then convert back. nextafter would be simpler though. – rcgldr Oct 14 '17 at 09:47
-
Math.nextAfter never noticed that one but yes thats it! – KIC Oct 14 '17 at 10:34
-
Two of the votes to close suggested it was a duplicate of a question that answered the question for C. This question asks about Java and is not actually answered by C code, so I provided another question that covers Java. – Eric Postpischil Oct 14 '17 at 14:08