David Coppa wrote: > Take the following reduced test-case, adapted from what R's code > does: > > ---8<--- > > #include <stdio.h> > #include <stdlib.h> > #include <math.h> > > int main(void) { > double theta = 1; > long double lambda, pr, pr2; > > lambda = (0.5*theta); > pr = exp(-lambda); > pr2 = expl(-lambda); > > printf("theta == %g, pr == %Lg, pr2 == %Lg\n", theta, pr, pr2); > exit(0); > } > > ---8<--- > > This produces the following output on Linux (x86_64): > > theta == 1, pr == 0.606531, pr2 == 0.606531 > > While on OpenBSD -current amd64: > > theta == 1, pr == 0.606531, pr2 == nan
FWIW, it looks even stranger on loongson: $ cc -o expl expl.c -O2 -pipe -lm $ ./expl theta == 1, pr == -9.15569e-2474, pr2 == 6.10667e-4944 $ ./expl theta == 1, pr == 0.606531, pr2 == 0.606531 $ ./expl theta == 1, pr == -9.15569e-2474, pr2 == 6.10667e-4944 $ sysctl kern.version kern.version=OpenBSD 5.5-beta (GENERIC) #106: Mon Feb 3 01:47:15 MST 2014 t...@loongson.openbsd.org:/usr/src/sys/arch/loongson/compile/GENERIC