On 01/07/2026 9:12 PM, FinalEvilution wrote:
I was looking at the docs for std.math.hardware's [FloatingPointControl] (https://dlang.org/phobos/std_math_hardware.html#.FloatingPointControl) and i found the following lines
and example interesting.

"Note in particular that if invalidException is enabled, a hardware trap will be generated whenever an
uninitialized floating-point variable is used."

The word "uninitialized" is wrongly used here.

An uninitialized variable may or may not contain a valid float value in it.

https://github.com/dlang/phobos/issues/11050

```
{
     FloatingPointControl fpctrl;

    // Enable hardware exceptions for division by zero, overflow to infinity,
     // invalid operations, and uninitialized floating-point variables.
fpctrl.enableExceptions(FloatingPointControl.severeExceptions);

     // This will generate a hardware exception, if x is a
     // default-initialized floating point variable:
     real x; // Add `= 0` or even `= real.nan` to not throw the exception.
     real y = x * 3.0;

     // The exception is only thrown for default-uninitialized NaN-s.
     // NaN-s with other payload are valid:
     real z = y * real.nan; // ok

    // The set hardware exceptions and rounding modes will be disabled when
     // leaving this scope.
}
```

This seems nice. Turn on fp exceptions in your main for debug builds and if it crashes use gdb
to get the stack trace.

But the example doesn't work.

Looking at the [dmd Change Log](https://dlang.org/ changelog/2.087.0.html#nan) uninitialized float's were changed from
signaling NaN's to quiet NaN's in v2.087.0
I looked at the [issue](https://bugzilla-archive.dlang.org/bugs/19905/) and it's [see also](https://github.com/dlang/dmd/ pull/7568#discussion_r159847869) but i don't understand what the harm would be
even if it's not 100% reliable.

Thanks.


```d
float f;

assert(f is float.init);
```

That will fail.

A signally NaN is a different value from a Quiet NaN and is expression is a bit wise compare.

  • Why were uniniti... FinalEvilution via Digitalmars-d-learn
    • Re: Why wer... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
      • Re: Why... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
        • Re:... FinalEvilution via Digitalmars-d-learn

Reply via email to