Date: Tue, 25 Apr 2000 07:47:01 -0700 (PDT) From: David Mosberger <davidm@hpl.hp.com> To: Brooks Davis <brooks@one-eyed-alien.net> Cc: Nate Lawson <nate@elite.net>, freebsd-hackers@FreeBSD.ORG, freebsd-ports@FreeBSD.ORG, davidm@hpl.hp.com Subject: Re: floating point exceptions Message-ID: <14597.45029.383712.138944@napali.hpl.hp.com> In-Reply-To: <20000425000523.A17224@orion.ac.hmc.edu> References: <Pine.BSD.3.91.1000424233753.13392A-100000@almond.elite.net> <20000425000523.A17224@orion.ac.hmc.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
OK, having to call fpsetmask(0) is an acceptable workaround. So if I do: #ifdef __freebsd___ fpsetmask(0); #endif Then this should work on all versions of freebsd? --david >>>>> On Tue, 25 Apr 2000 00:05:23 -0700, Brooks Davis <brooks@one-eyed-alien.net> said: Brooks> On Mon, Apr 24, 2000 at 11:44:59PM -0700, Nate Lawson wrote: >> I am running FreeBSD 4.0-RELEASE on x86 with gcc 2.95.2 and the >> httperf-0.6 port gives a SIGFPE and dumps core when run against a >> system that has no web server running. (The default behavior is >> to measure localhost when no arguments are specified). >> >> It seems this is caused by a divide by zero error since the delta >> between connections ends up being zero. The author suggest that >> the divide should return a defined value, Inf, according to the >> IEEE floating point standard. FreeBSD generates SIGFPE. I >> temporarily patched the code locally to check for a delta of zero >> and arbitrarily set it to 1.0 so that the divide succeeds and >> everything comes out ok without crashing. >> >> Is FreeBSD's behavior correct? Why or why not? You can use the >> included code snippet to verify that this occurs. Brooks> FreeBSD has traditionaly violated the IEEE FP standard in Brooks> this regard. This is fixed in 5.0 and I think in 4.0-STABLE Brooks> (though I can't remember what file this is in so I can't Brooks> check.) If upgrading to -stable isn't an option you can add Brooks> a call to fpsetmask(3) in the application as follows (this Brooks> will work on Solaris and Irix as well): Brooks> #include <ieeefp.h> <...> main() { <declare things> Brooks> fpsetmask(0); <...> } Brooks> -- Brooks Brooks> -- Any statement of the form "X is the one, true Y" is Brooks> FALSE. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?14597.45029.383712.138944>