in reply to XS, C doubles and -Duselongdouble
In theory, the NV for the constant 1.1 will be the closest long double to the exact value for 1.1. As far as I can tell, the cast to double rounds to the nearest possible double value, which is almost always going to be the closest double value to the original exact value. So I don't see how you could be worried about those.
The value returned by foo(), a long double laundered through a double, is almost always going to be different from the original value - given purely random long double input, something like 99.95 % of the time. Though you'll run across cases where no loss occurs more often than that, since many interesting values are exactly representable as a double or long double, e.g. 2.5, or 1.
So, why does it matter to you that precision may be (rather, is probably going to be) lost? What do you want to do differently based on whether precision is lost?
Update: maybe all you want is to use sprintf("%.15g", perl_foo($x)) instead of just perl_foo($x)?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: XS, C doubles and -Duselongdouble
by syphilis (Archbishop) on Jun 11, 2007 at 07:32 UTC | |
by ysth (Canon) on Jun 11, 2007 at 07:40 UTC |