Movement against float.init being nan

ryuukk_ ryuukk.dev at gmail.com
Wed Aug 24 18:11:57 UTC 2022


On Wednesday, 24 August 2022 at 05:54:59 UTC, Walter Bright wrote:
> On 8/22/2022 7:16 AM, Steven Schveighoffer wrote:
>> One thing that everyone seems to be ignoring is that 99% of 
>> the time, when I find out I didn't initialize a float and it's 
>> NaN, it's because I didn't correctly initialize it to 0.
>
> Then 1% of the time 0 is the wrong value and you never notice 
> that the resulting calculation is off. Whereas with NaN you 
> notice that when there's "NaN" in the printed result, it's not 
> hiding.
>
> > Imagine you are making a 3-d model, and one vertex out of
> 100k is NaN. How will you notice it? A single missing triangle 
> somewhere?
> But make that vertex 0, and all of a sudden your model has this 
> weird triangle sticking out extending to the origin, and is 
> completely obvious.
>
> C89 did not take NaNs into account for the floating point parts 
> of the C standard library. But C99 did, and if the program 
> tries to calculate:
>
>    sin(NaN)
>
> the result will be NaN, guaranteed by the C99 Standard.
>
> If the graphics library cannot handle certain floating point 
> values, such as NaN or Infinity, then that should be checked 
> for as part of the call. At least in debug builds. It'll be a 
> lot easier than looking for an out of place triangle. Most 
> graphical displays seem to have an awful lot of tiny triangles.
>
> If I was writing code that, say, calculated a trajectory of a 
> space craft, there is no way it would be acceptable to have 
> default 0 initialization. Even if it's right 99% of the time. 
> Because 1% of the time having a hull loss is not acceptable.
>
> P.S. graphics software generally doesn't care about making 
> mistakes. I've seen plenty of buggy graphics in video games, 
> and it doesn't matter because it doesn't affect game play. But 
> people doing science, engineering, accounting, flight controls, 
> etc., care very much about getting 100% correct results. 1% 
> going awry is not acceptable.

That's the best answer possible, i used to be annoyed by float 
not being 0 by default, but as i learn more and read different 
takes on it, it makes sense, and i don't mind anymore

The main issue is to get used to it, it takes time if you use 
other languages that defaults to 0


More information about the Digitalmars-d mailing list