c - 将具有整数值的 double 值转换为整数时,是否保证执行 'properly' ?

标签 c floating-point lua

当 double 具有“精确”整数值时,如下所示:

double x = 1.0;
double y = 123123;
double z = -4.000000;

当通过 (int)x、(int)y、(int)z 转换为整数类型时,是否保证它会正确舍入为 1、123123 和 -4? (并且不截断为 0、123122 或 -5 b/c 的 float )。我根据this page询问b/c (这是关于 lua 中的 fp,一种默认情况下只有 double 作为其数字类型的语言),根据 IEEE 754 讨论了 double 的整数运算是如何精确的,但我不确定在调用 C 函数时是否整数类型参数,我需要担心手动舍入 double ,或者当 double 具有精确的整数值时会处理。

最佳答案

是的,如果整数值适合 int

double 可以表示超出您的 int 类型范围的整数值。例如,如果您的 int 类型只有 16 位,则 123123.0 无法转换为 int

也不能保证 double 可以表示特定类型可以表示的每个值。 IEEE 754 使用类似 52 或 53 位的尾数。如果您的 long 有 64 位,那么将非常大的 long 转换为 double 并返回可能不会得到相同的值。

关于c - 将具有整数值的 double 值转换为整数时,是否保证执行 'properly' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10939605/

相关文章:

c++ - Excel 64 位中的 C 函数不能用作工作表函数,但在 VBA 中运行良好

c# - 在 C# 中递增十进制数

c++ - 如何摆脱这些 C++ 警告?

c - 如何在 C 中使用原子变量?

c - 使用 Select 读取时超时

c - While 循环条件不满足

c++ - luabind:无法从非内置类索引的表中检索值

string - Lua前沿模式匹配(全词搜索)

c - 如何输出小于跑马灯标志尺寸的跑马灯字符串?

c - 浮点值的json序列化