将无符号整数转换为从 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;
所以我想将一个无符号整数(相当大的整数,通常超过无符号整数限制的一半)转换为双精度数,以显示它在 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;