| def format(number): | |
| upper = number // (1 << 64) | |
| lower = number % (1 << 64) | |
| print("" + hex(upper) + "," + hex(lower) + ",") | |
| for q in range(-342, 0): | |
| power5 = 5 ** -q | |
| z = 0 | |
| while (1 << z) < power5: | |
| z += 1 | |
| if q >= -27: | |
| b = z + 127 | |
| c = 2 ** b // power5 + 1 | |
| format(c) | |
| else: | |
| b = 2 * z + 2 * 64 | |
| c = 2 ** b // power5 + 1 | |
| # truncate | |
| while c >= (1 << 128): | |
| c //= 2 | |
| format(c) | |
| for q in range(0, 308 + 1): | |
| power5 = 5 ** q | |
| # move the most significant bit in position | |
| while power5 < (1 << 127): | |
| power5 *= 2 | |
| # *truncate* | |
| while power5 >= (1 << 128): | |
| power5 //= 2 | |
| format(power5) |