当 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的浮点怪异度)。我根据this page(这是关于lua中的fp,默认情况下,其数字类型仅以 double 形式表示的语言)询问b/c,并讨论了根据IEEE 754,具有 double 形式的整数运算如何精确,但是我不确定如果在调用带有整数类型参数的C函数时,我需要担心手动舍入 double 数,或者当 double 数具有精确的整数值时要小心。

最佳答案

是的,如果整数值适合int
double可能代表超出int类型范围的整数值。例如,如果您的123123.0类型只有16位,则无法将int转换为int

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

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

10-11 23:21
查看更多