请注意,32位的int
可以被64位IEEE 754 double
精确表示(实际上它可以精确地表示高达53位的整数)。
如果您使用的整数大于浮点类型所能表示的范围,则适用于Real floating-integer conversions的规则:
- 如果该值可以被表示但无法精确表示,则结果是最接近的更高或更低的值(换句话说,舍入方向是实现定义的),尽管如果支持IEEE算术,则四舍五入到最近。在这种情况下,未指定是否会引发FE_INEXACT。
- 如果该值无法表示,则行为是未定义的,尽管如果支持IEEE算术,则会引发FE_INVALID并且结果值未指定。
没有C++标准函数来控制舍入模式,大多数实现将使用IEEE四舍五入。
int
是32位,它将始终转换为精确的double
值(再次假设为64位IEEE-754 double)。有关其他情况下的规则,请参见实浮点整数转换。 - Alan Birtlesdouble
中精确表示(请参见此处:https://dev59.com/G3I-5IYBdhLWcg3wc3-w)。然而,对于大于该值的值(您将需要一个 64 位整数),问题仍然存在。 - wohlstaddouble
类型通常有53位的尾数。你可以至少精确地表示约2^53个值,不仅仅是2的幂次方(例如通过将指数设置为2^0)。 - wohlstad