gpt4 book ai didi

在不损失精度的情况下将 unsigned 转换为 double 到 unsigned

转载 作者:太空狗 更新时间:2023-10-29 15:13:06 28 4
gpt4 key购买 nike

整数值转换为浮点值并再次返回时是否与原始整数值相同?

例如:

unsigned x = 42;
double y = x;
unsigned z = y;

假设编译器没有优化浮点转换,x == z 是否总是评估为 true

我怀疑浮点转换中的任何表示错误总是增加值。因此,当浮点值转换回整数值时,该值将被截断,这始终会导致原始整数值。

我的假设是否正确?

最佳答案

假设 double 为 IEEE 754 double 格式,对于 的所有值,表达式 x == z 的计算结果为 1 >x 最多 253。例如,如果您的编译器提供 32 位 unsigned int,这意味着 x 的所有可能值。

您已编辑问题以询问从整数到 float 的转换。在大多数 C 实现中,此转换根据 FPU 舍入模式进行舍入,默认情况下舍入到最近偶数。从 float 到 integer 的转换存在不对称性(正如您所指出的,从 float 到 int 的转换总是截断)。

但是,从整数到 float 的转换中的任何错误并不意味着您得到了一个没有小数部分的部分,而是您得到了完全错误的整数。例如,整数 253+1 被转换为表示 253double。出于这个原因,即使从 float 到整数的转换总是四舍五入,从 float 到整数的转换截断也无济于事。

从整数到 float 的转换中的舍入误差可能大于一:整数 5555555555555555555,当转换为 double 时,舍入为 5555555555555555328,它恰好有一个比前者更简单的二进制表示。一半时间,舍入向上:例如 555555555555555855 舍入为 555555555555556352

关于在不损失精度的情况下将 unsigned 转换为 double 到 unsigned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20147960/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com