将无符号整数转换为从 0 到 1 的双精度数。除以整数限制不起作用

Turning an unsigned integer into a double from 0 to 1. Dividing by integer limit not working

所以我想将一个无符号整数(相当大的整数,通常超过无符号整数限制的一半)转换为双精度数,以显示它在 0 和无符号整数限制之间的距离。问题是,将它除以无符号整数限制总是返回 0。示例:

#include <iostream>
;
int main()
{
    uint64_t a = 11446744073709551615
    double b = a / 18446744073709551615;
    std::cout << b;
};

这总是 returns0。是否有替代方法或方法来解决这个问题? 如果这意味着什么,我正在使用带有 -O3 优化标志的 GCC。

你必须将右边的表达式转换为double,例如,像这样:

double b = static_cast<double>(a) / 18446744073709551615;

double b = a / 18446744073709551615.0;