Date: Thu, 25 Sep 1997 15:52:14 -0500 (CDT) From: Dave Bodenstab <imdave@mcs.net> To: freebsd-questions@FreeBSD.ORG, rlyon@ozemail.com.au Subject: Re: NIST ATM Network Simulator. Message-ID: <199709252052.PAA01102@imdave.pr.mcs.net>
index | next in thread | raw e-mail
> From: "Richard Lyon" <rlyon@ozemail.com.au>
> I am currently attempting to port the NIST ATM
> simulator to FBSD. It compiles correctly but
> does suffer from the dreaded floating point exceptions
> during simulations.
>
> Has anyone run this application on FBSD successfully?
>
> Looking at the source, I can see most of the problems
> relate to the differences between the original development
> environment and FBSD. Not a big deal, but it will take a
> few weeks work, which I would rather avoid if possible.
Apparently many Unix's mask floating point exceptions by default.
FreeBSD does not. Good? Bad? Well, it's just the way it is.
I find that many application programs seem to rely on the
exceptions being masked rather than being more careful how
computations are done. A quick kludge is to simply mask
all the exceptions... of course, whatever errors are hidden
by this approach remain... Just insert the following in
the function main():
:
#include <floatingpoint.h>
:
:
main()
{
:
:
#ifdef __FreeBSD__
/*
* This goes near the beginning of main(), usually just after the variable
* declarations.
*/
/* Round to nearest */
fpsetround( FP_RN );
/* Mask all exceptions */
fpsetmask( ~ (FP_X_INV | FP_X_DNML | FP_X_DZ | FP_X_OFL | FP_X_UFL | FP_X_IMP) );
#endif
:
:
#ifdef __FreeBSD__
/*
* This goes near the end of main() before the final return.
*/
fpresetsticky( FP_X_INV | FP_X_OFL | FP_X_UFL | FP_X_DZ | FP_X_IMP | FP_X_DNML );
#endif
:
:
}
Take a look at floatingpoint.h and machine/ieeefp.h
Dave Bodenstab
imdave@mcs.net
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199709252052.PAA01102>
