[Jprogramming] Overflow, underflow, floats

Erling Hellenäs erling at erlinghellenas.se
Wed Sep 20 09:47:42 UTC 2017


Hi all !

"A NaN may carry a payload that is intended for diagnostic information 
indicating the source of the NaN"

https://en.wikipedia.org/wiki/IEEE_754#Alternate_exception_handling

Maybe this is a way to represent missing data?

Cheers,

Erling


Den 2017-09-20 kl. 11:21, skrev Erling Hellenäs:
> Hi all!
>
> This is how J handles overflow and underflow. This is exacly how the 
> platform handles it. JWithATwist gives exactly the same results. As we 
> can see overflow results in infinity, underflow results in a zero result.
>
>    0.1234567891234567e_15 * 0.1234567891234567e_307
> 0
>    0.1234567891234567e_14 * 0.1234567891234567e_307
> 1.4822e_323
>    0.123456789 * 0.123456789
> 0.0152416
>    0.1234567891234567e3 * 0.1234567891234567e307
> 1.52416e308
>    0.1234567891234567e4 * 0.1234567891234567e307
> _
>
> We can see that overflow and underflow are treated differently.
>
> Before we get a zero result in the underflow case the fraction bits 
> are moved to the right and we lose precision.
>
> As we can understand this is a problematic behavior. Zero is no fault 
> indication. It is a number with zero precision. If we multiply it with 
> some big number and then add or subtract something we get a non-zero, 
> but totally random result. Lost precision is also a problem. In 
> engineering we rely on the precision of the result.
>
> It would be preferable to get a NaN or optionally an underflow error 
> in this case? Instead of even losing precision?
>
> The overflow case seems less of a problem. As far as I understand 
> further calculation with the infinity value will never result in a 
> seemingly legitimate value. The positive infinity, negative infinity 
> or NaN that will be the result of the calculations can be used as 
> fault indications.
>
> As I see it we would like to optionally get an overflow error in this 
> case.
>
> A big number is not infinity, and as I see it we would prefer a NaN 
> result to an infinity result. We can get infinity when we should, for 
> example when we divide by exactly 0?
>
> We would like the positive and negative infinity to have their 
> mathematical meaning?
>
> We have signed zero. +0 has a different representation from -0. That's 
> peculiar. However in comparisons they happily are considered equal.
>
> I can't find any way to make these different representations cause any 
> trouble.
>
> However, in J 0 % 0 is now considered to be 0. The mathematically 
> correct result in undefined. Windows gives NaN.
>
> J:
>
>    3!:0 (0 + 0.5 - 0.5)
> 8
>    (0 + 0.5 - 0.5) % (0 + 0.5 - 0.5)
> 0
>
> JWithATwist, Windows default:
>
>
> { ( 0 + 0.5 - 0.5 ) % ( 0 + 0.5 - 0.5 ) }
>  NaN
>
>
> I think this should be changed. We should get NaN. Optionally we 
> should get a NaN error.
>
>
> Infinity divided with negative zero gives positive infinity as default 
> on the Windows platform and in J. This seems reasonable as there is no 
> means to have the +0 and -0 represent function results approaching but 
> not reaching zero from both sides anyway. Otherwise, this might have 
> been meaningful functionality. This would require THREE different zero 
> representations!
>
>
> It would probably be good to be able to represent missing data. R is 
> an example of a language which represents missing data.
>
>
> We can still lose precision by addition and subtraction of large 
> positive or negative numbers.
>
>
> I did not investigate how much of my proposed modifications the 
> standards would allow.
>
>
> Cheers,
>
> Erling
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm



More information about the Programming mailing list