这是一个基本问题,我的感觉是答案是肯定的(int = 32位,double = 53位尾数+符号位)。
基本上可以触发断言吗?
int x = get_random_int();
double dx = x;
int x1 = (int) dx;
assert(x1 ==x);
if (INT_MAX-10>x)
{
dx+=10;
int x2=(int) dx;
assert(x+10 == x2);
}
显然,涉及除法和类似的复杂表达式的内容(例如(int)(5.0/3*3)不同于5/3*3)将不能正常工作,但我想知道转换和加减(如果没有溢出发生)是否保持等效。