当一个带整数值的double被转换为一个整数时,它是否保证"正确"?

use*_*481 12 c floating-point lua

当double具有'exact'整数值时,如下所示:

double x = 1.0;
double y = 123123;
double z = -4.000000;
Run Code Online (Sandbox Code Playgroud)

当通过(int)x,(int)y,(int)z强制转换为整数类型时,它是否可以保证正确地舍入到1,123123和-4?(并且不截断为0,123122或-5 b/c的浮点怪异).我问b/c根据这个页面(这是关于lua中的fp,一种默认只有双倍数字类型的语言),讨论如何根据IEEE 754对双精度进行整数运算,但我不是确定当使用整数类型参数调用C函数时,我需要担心手动舍入双精度,或者当双精度具有精确整数值时需要注意.

Adr*_*thy 9

是的,如果整数值适合于int.

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

它也不能保证a double可以表示特定类型可以表示的每个值.IEEE 754使用52或53位的尾数.如果你long有64位,那么将非常大的转换longdouble和返回可能不会给出相同的值.