On Monday 03 November 2008 09:38:11 Andy Dougherty wrote:
> > 2. 4 of the tests appear to fail depending on how the OS 'spells'
> > the negation of zero. Could we address this in a hints file?
> This is a long-standing problem: See [perl #28170] and [perl #30737]. The
> last time I looked at this, the it seemed we should probably use
> signbit(), if available. (If it's not available, a fallback is needed,
> but it's likely to usually be available.) However, I don't know why
> OpenBSD would differ from NetBSD in this regard. Certainly the math.c
> platform files are nearly identical. Are the underlying machines and
> perl5 configurations the same for the NetBSD and OpenBSD tests? The
> 'myconfig' files from each configuration would be helpful in trying to
> assess what's the same and what's different.
I wonder if this patch fixes things. Certainly it does no harm on my box.
Parrot_signbit() already exists in the platform files, so we might as well
use it.
> > 3. 1 of the tests appears to fail depending on how the OS initial-
> > cases 'Inf'. Again, could this be addressed in a hints file?
>
> This too is a long-standing problem: See [perl #19183]. It stalled
> pending a decision on whether or not parrot should try to enforce a single
> spelling of 'Inf' (and 'Nan', etc.) or whether the tests should patch over
> the issue.
A brief skim of src/bignum.c shows that we have code which intends to handle
this, but we don't build or use it.
-- c
=== src/spf_render.c
==================================================================
--- src/spf_render.c (revision 32475)
+++ src/spf_render.c (local)
@@ -724,7 +724,12 @@
STRING *ts;
const HUGEFLOATVAL thefloat =
obj->getfloat(interp, info.type, obj);
+ const long double ld = (long double)thefloat;
+ /* force negative float zero to -0.0 in output */
+ if (fabsl(ld) == 0.0 && Parrot_signbit(ld))
+ info.flags |= FLAG_MINUS;
+
/* turn -0.0 into 0.0 */
gen_sprintf_call(tc, &info, ch);
ts = cstr2pstr(tc);