[#6864] ruby 1.8.4 rc breaks alias_method/rails in bad ways — "Ara.T.Howard" <ara.t.howard@...>

20 messages 2005/12/09
[#6870] Re: ruby 1.8.4 rc breaks alias_method/rails in bad ways — =?ISO-8859-15?Q?Florian_Gro=DF?= <florgro@...> 2005/12/12

Ara.T.Howard wrote:

[#6872] Re: ruby 1.8.4 rc breaks alias_method/rails in bad ways — ara.t.howard@... 2005/12/12

On Tue, 13 Dec 2005, [ISO-8859-15] Florian Growrote:

[#6873] Re: ruby 1.8.4 rc breaks alias_method/rails in bad ways — James Edward Gray II <james@...> 2005/12/12

On Dec 12, 2005, at 1:19 PM, ara.t.howard@noaa.gov wrote:

[#6874] Re: ruby 1.8.4 rc breaks alias_method/rails in bad ways — ara.t.howard@... 2005/12/12

On Tue, 13 Dec 2005, James Edward Gray II wrote:

[#6891] Time.utc! and Time.localtime! — Daniel Hobe <hobe@...>

Writing a script yesterday I found out, much to my surprise, that the

16 messages 2005/12/14

[#6918] change to yaml in 1.8.4 — ara.t.howard@...

14 messages 2005/12/16

[#6934] 1.8.x, YAML, and release management — Ryan Davis <ryand-ruby@...>

I'm concerned that 1.8.3's acceptance of non-backwards-compatible

28 messages 2005/12/18

[#6996] Problems building 1.8.4 with VS8 C++ Express Edition (cl 14.00) — Austin Ziegler <halostatue@...>

Visual Studio C++ 2005 Express Edition (VS 8.0)

20 messages 2005/12/27

Math.sqrt(-1) inconsistancies

From: Jeffrey Dik <jeffrey.dik@...>
Date: 2005-12-29 17:12:49 UTC
List: ruby-core #7019
Hi,

I've noticed some inconsistancies with Math.sqrt(-1).  Here's what the
rdoc in math.c says:

/*
 *  call-seq:
 *     Math.sqrt(numeric)    => float
 *
 *  Returns the non-negative square root of <i>numeric</i>. Raises
 *  <code>ArgError</code> if <i>numeric</i> is less than zero.
 */

On Gentoo Linux PPC:
 > ruby -v
   ruby 1.8.2 (2004-12-25) [powerpc-linux]
 > ruby -e "p Math.sqrt(-1)"
   -e:1:in `sqrt': Numerical argument out of domain - sqrt (Errno::EDOM)
      	   from -e:1

On Windows 2000:
 > ruby -v
   ruby 1.8.2 (2004-12-25) [i386-mswin32]
 > ruby -e "p Math.sqrt(-1)"
   -e:1:in `sqrt': Domain error - sqrt (Errno::EDOM)
        from -e:1

On Cygwin:
 > ruby -v
   ruby 1.8.2 (2004-12-25) [i386-cygwin]
 > ruby -e "p Math.sqrt(-1)"
   -e:1:in `sqrt': Numerical argument out of domain - sqrt (Errno::EDOM)
        from -e:1

On FreeBSD 5.3
 > ruby -v
   ruby 1.8.2 (2004-07-29) [i386-freebsd5]
 > ruby -e "p Math.sqrt(-1)"
   NaN

Two of my friends tested it on a couple of other platforms, Mac OSX
returns "NaN", x86 Linux and Solaris throw the Errno::EDOM error.

So, it appears that the sqrt() the *BSDs (at least, FreeBSD and Mac OSX) use
does not set errno.  My friend thinks that you have to use fegetexceptflag() or
something like that to check for floating-point exceptions on *BSDs.

The math_sqrt function in math.c is the same in ruby 1.8.1, 1.8.2, and the CVS
HEAD.  ruby 1.6.8's math_sqrt() is similiar, but it does check if the parameter
is negative and throws an ArgumentError if it is negative.  Here's the 1.6.8
source:
      if (RFLOAT(x)->value < 0.0) rb_raise(rb_eArgError, "square root for negative number");

Maybe that line should be re-added?  If not, maybe the rdoc should be updated
to say something like "This function runs your libc sqrt function.  If that
function sets errno, an exception is raised.  This may or may not raise an
exception if numeric is negative."  Or perhaps there needs to be a new way to
look for floating point exceptions on the *BSDs.

I have no idea what the Right(TM) solution is :-)  I figured you gurus here
would know.

Jeff

In This Thread

Prev Next