根据http://en.cppreference.com/w/cpp/numeric/math/pow,当std::pow
与整数参数一起使用时,结果被提升为double
。std :: pow与整数参数比较,整数类型比较
我的问题是那么下面:
如何安全是比较有std::pow(int1, int2)
的结果的整数类型? 例如,下面的if
可以评估为true吗?
std::size_t n = 1024;
if(n != std::pow(2, 10))
cout << "Roundoff issues..." << endl;
也就是说,有没有可能在RHS结果可能是类似1023.99 ... 9所以当转换为size_t成为1023?
我的猜测是在一个大NO的反应,但想知道肯定。我在检查矩阵的尺寸等时使用了这些比较,我不想在任何地方都使用std::round
。
2,10和1024都可以完全用'double'表示。你应该没问题,只要输入和输出符合53位(假设IEEE-754是双精度) – Praetorian
@Praetorian你应该告诉user1257。 http://stackoverflow.com/questions/15851636/is-this-a-g-bug –
@PascalCuoq这很有趣,也很可怕。我无法在gcc4.4.7,4.8,4.9或MinGW gcc4.9上重现;但很好意识到这个问题。谢谢。 – Praetorian