将 unsigned long long 转换为 float 并丢失精度

标签 c floating-point unsigned-long-long-int

我有两个无符号长整数 l1l2。 我将这些数字转换为 float 并将它们保存为 f1f2

f1 = (float) l1;
f2 = (float) l2;

现在考虑 l1 > l2 任意数量,比如 100。

是否存在 f1 <f2 这样的情况? (这里的f1是由l1转换过来的,它大于l2)。如果是,您能否演示如何找到这样的数字?

sizeof(float) = 4 and sizeof(unsigned long long) = 8.

最佳答案

Can there be a case such that f1 < f2

否:对于任何舍入模式,从整数到 float 的转换都是递增的。只要不更改 l1 和 l2 转换之间的舍入模式,f1 和 f2 的顺序与 l1 和 l2 的顺序相同(尽管在 l1 和 l2 不同的地方它们可能相等)。

关于将 unsigned long long 转换为 float 并丢失精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20634659/

相关文章:

swift - Swift 中 Double 的 Unsigned Long Long

C 硬编码数组作为 memcpy 参数

c - 字符串的地址什么时候分配?

c - 分配给另一个字符指针后,字符指针的值发生变化

c - 了解 if() 中的浮点变量比较

c - float 在 c 中打印出负 0

c - 查找数组中元素的总和

haskell - Haskell中函数 'floor'类型错误

c++ - 如何在 Windows 上eekg() 超过 4GB 的文件?

c - 如何检查输入的数字是否为正数?