FreeBSD strtod() implementation bug affects Erlang R14B01 float handling

Kenji Rikitake <>
Sun Feb 13 04:32:20 CET 2011


This is not necessarily an Erlang bug, but a notable FreeBSD-specific
issue.  Forwarded from the mochiweb Google Group.

Kenji Rikitake

----- Forwarded message from Kenji Rikitake <> -----

Date: Sun, 13 Feb 2011 12:26:41 +0900
From: Kenji Rikitake <>
To: 
Subject: Re: [mochiweb] mochinum BigDenorm test case failure on FreeBSD 7.3-RELEASE i386 and R14B01
Reply-To: 

Paul Guyot has already raised this issue.
http://code.google.com/p/mochiweb/issues/detail?id=59#c0

And FreeBSD PR kern/143037 says this is fixed in FreeBSD 8.1 and later.
http://www.freebsd.org/cgi/query-pr.cgi?pr=143037&cat=kern

So this should be treated as a known bug for FreeBSD 7.x and 8.0.

Thanks for the assistance.
Regards,
Kenji Rikitake

++> Bob Ippolito <> [2011-02-13 10:33:09 +0800]:
> Date: Sun, 13 Feb 2011 10:33:33 +0800
> From: Bob Ippolito <>
> To: 
> Subject: Re: [mochiweb] mochinum BigDenorm test case failure on FreeBSD
>  7.3-RELEASE i386 and R14B01
> Reply-To: 
> 
> I have heard of this before, the best I can tell is that FreeBSD (or
> Erlang on FreeBSD) is just slightly broken with regard to extreme
> floats. Erlang probably uses a libc function for list_to_float and it
> doesn't give the correct result?
> 
> 1> <<2.225073858507201e-308/float>>.
> <<0,15,255,255,255,255,255,255>>
> 2> <<2.2250738585072014e-308/float>>.
> <<0,16,0,0,0,0,0,0>>
> 
> Looking at the code in erts/emulator/beam/bif.c it calls
> sys_chars_to_double from erts/emulator/sys/unix/sys_float.c which ends
> up calling the libc strtod. The bug is probably there.
> 
> On Sun, Feb 13, 2011 at 9:16 AM, Kenji Rikitake <> wrote:
> > Found the following test case failure on
> > running mochiweb tests on a FreeBSD 7.3-RELEASE i386
> > and R14B01.
> > Fload handling issues?
> >
> > module 'mochinum'
> > ?mochinum: int_ceil_test...ok
> > ?mochinum: int_pow_test...ok
> > ?mochinum: digits_test...*failed*
> > ::error:{assertEqual_failed,
> > ? ? ? ? ?[{module,mochinum},
> > ? ? ? ? ? {line,301},
> > ? ? ? ? ? {expression,"list_to_float ( digits ( BigDenorm ) )"},
> > ? ? ? ? ? {expected,2.225073858507201e-308},
> > ? ? ? ? ? {value,2.2250738585072014e-308}]}
> > ?in function mochinum:'-digits_test/0-fun-13-'/2
> > ?in call from mochinum:digits_test/0
> >
> >
> > ?mochinum: frexp_test...ok
> > ?[done in 0.012 s]
> >
> > --
> > You received this message because you are subscribed to the Google Groups "MochiWeb" group.
> > To post to this group, send email to 
> > To unsubscribe from this group, send email to 
> > For more options, visit this group at http://groups.google.com/group/mochiweb?hl=en.
> >
> >
> 
> -- 
> You received this message because you are subscribed to the Google Groups "MochiWeb" group.
> To post to this group, send email to 
> To unsubscribe from this group, send email to 
> For more options, visit this group at http://groups.google.com/group/mochiweb?hl=en.

-- 
You received this message because you are subscribed to the Google Groups "MochiWeb" group.
To post to this group, send email to 
To unsubscribe from this group, send email to 
For more options, visit this group at http://groups.google.com/group/mochiweb?hl=en.

----- End forwarded message -----


More information about the erlang-bugs mailing list