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
[email protected]:/usr/src/sys/arch/loongson/compile/GENERIC