Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^9: Introspection into floats/NV

by ikegami (Patriarch)
on Jun 05, 2025 at 14:35 UTC ( [id://11165272]=note: print w/replies, xml ) Need Help??


in reply to Re^8: Introspection into floats/NV
in thread Introspection into floats/NV

I'm not a C programmer

C doesn't mandate the size or format of float, double or long double. Some or all of these might even be optional to implement.

Unfortunately, there is no mention of the FP80 format you mentioned in another thread.

Wikipedia's Extended_precision#x86_extended-precision_format says

"The x86 extended-precision format is an 80-bit format first implemented in the Intel 8087 math coprocessor and is supported by all processors that are based on the x86 design that incorporate a floating-point unit (FPU)."

gcc makes these available as __float80 on x86-64 machines.

F will produce f,d or D according to the setting.

NV (F) is user-defined, and it isn't limited to be one of float (f), double (d) or long double (D).

For example, someone using gcc on a modern x86-64 (i.e. nearly everyone) could build a Perl with the following types:
pack formatC typeWhat it is
ffloatIEEE single
ddoubleIEEE double
Dlong doubleIEEE quad
FNV = __float80Intel 80-bit extended precision

It would be an unusual choice since __float80 is padded to 16 bytes, the same size as the also-supported IEEE quad.

Will F return another bitlength?

It can.

In that setup described, it would return the same byte length as D since __float80 is padded to 16 bytes, but it would be a different format that D.

if F returns different bit length it's possible to tell that it's not a FP64. It might be much trickier to tell if its according to IEEE though (i.e. position and format of sign and exponent)

Exactly. It's easy to tell that a (say) 10-byte format isn't an one of the IEEE formats, but distinguishing a __float80 from an IEEE quad is harder.

Updated based on new knowledge of about the 80-bit floats.

Replies are listed 'Best First'.
Re^10: Introspection into floats/NV
by LanX (Saint) on Jun 05, 2025 at 15:25 UTC
    Thanks.

    > It would be an unusual choice since __float80 is padded to 16 bytes, the same size as the also-supported IEEE quad.

    Ouch! What a waste.

    OTOH FP80 with a mantissa of 64bit would solve syphilis perceived "weirdness" that rounding errors are suddenly 11 bits when the number range ob 64b integers is exceeded and numbers are coerced into FP64.

    FWIW: JavaScripts solution is to only express integers in FP64 doubles. (at least officially)

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    see Wikisyntax for the Monastery

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11165272]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2025-07-08 07:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.