Yes, it's one epsilon off. When you look at the bit representation:

```
>>> import struct
>>> [struct.unpack('<Q', struct.pack('<d', f))[0] for f in (2 ** -100, 1.0/1267650600228229260759214850049, 1.0/1267650600228229401496703205376)]
[4156822456062967808, 4156822456062967809, 4156822456062967808]
```

We have a choice in fixing the algorithm. Not sure how easy that would be as I've only ported it and not really thought through it. I'll give it a try though.