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