# `acos` returning `-nan`?

Jonathan Levi catanscout at gmail.com
Sat Nov 23 17:31:22 UTC 2019

```I have a `double` (from a math equation) which when logged is
`-1` but when a `acos` it it returns `-nan`?

The `double` has different bit representation than a normal `-1`
but I do not see how that is messing up its `acos`.

The `double`'s representation is: true,1023,58720256.

This will reproduce the problem:

```
import std;

void dWrite(double d) {
import std.stdio;
import std.conv;
import std.bitmanip;
auto dr = DoubleRep(d);
writeln(d,"\t",dr.sign,"\t", dr.exponent,"\t", dr.fraction);
}
double fromRep(bool sign, ushort exponent, ulong fraction) {
DoubleRep r;
r.sign = sign;
r.exponent = exponent;
r.fraction = fraction;
return r.value;
}

void main() {
double failing = fromRep(true,1023,58720256);
double lookalike = -1;

failing.dWrite;
lookalike.dWrite;

failing.acos.dWrite;
lookalike.acos.dWrite;
}
```

Any idea why that is and how I could solve it?

BTW this is the how that number is created:
`cos(a.angle)*cos(b.angle) -
dot(a.axis*sin(a.angle),(b.axis*sin(b.angle)))`

```