rossc@extro.ucc.su.oz.au (Ross Cartlidge) (09/19/90)
When I called do a:-
atan2(1.0, 0.0)
on a M/2000 running RISC/OS 4.5 I get a
divide by zero exception. On other machines I have
tried I do not. As atan2(1.0, 0.0) is defined (PI/2)
does anyone know why I get this exception. If I don't
enable div by zero exceptions it gives the correct answer.
The programs below demonstrates the problem on a MIPS
as compared to a Sun 4/60.
#include <signal.h>
#include <sys/fpu.h>
#include <math.h>
main()
{
double f;
double z;
int c();
union fpc_csr csr;
signal(SIGFPE, c);
csr.fc_word = get_fpc_csr();
csr.fc_struct.en_divide0 = 1;
csr.fc_struct.en_overflow = 1;
csr.fc_struct.en_invalid = 1;
set_fpc_csr(csr.fc_word);
f = atan2(1.0, 0.0);
printf("f = %f\n", f);
}
c()
{
printf("FPE\n");
}
This program shows the behaviour on a Sun 4/60:-
#include <signal.h>
#include <math.h>
main()
{
double f;
double z;
int c();
char *out;
printf("%d\n", ieee_handler("set","all",c));
printf("out = %s\n", out);
f = atan2(1.0, 0.0);
printf("f = %f\n", f);
}
c()
{
printf("FPE\n");
}
--
________________________________________________________________________
Ross Rodney Cartlidge | rossc@extro.ucc.su.oz.au
University Computing Service, H08 | Phone: +61 2 6923497
University of Sydney, NSW 2006, Australia | FAX: +61 2 6606557