c++ - 带有整数参数的 std::pow,与整数类型进行比较

标签 c++ c++11 floating-point floating-point-conversion

根据 http://en.cppreference.com/w/cpp/numeric/math/pow ,当 std::pow 与整数参数一起使用时,结果被提升为 double

我的问题如下:

将整数类型与 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?

我的猜测是,答案是一个大大的“否”,但想确定一下。我在检查矩阵等的维数时使用这些类型的比较,我不想在任何地方都使用 std::round

最佳答案

你问这个问题很有趣,因为someone else on StackOverflow有一个问题是由pow这一事实引起的应用于小整数并没有在他们的平台上计算出明显的结果(另请参阅我的 writeup)。

所以是的,在申请 pow 时对于小整数,参数和理想的数学结果都是可以精确表示的。这不会强制执行 exp返回数学结果,因为没有标准指定 pow不能超过一个不准确ULP .至少有一个非常流行的平台默认提供一个 pow不计算 pow(10, 2) 的函数为 100,但您可以自由选择 pow(2, N)也许它会碰巧总是返回您有权期望的整数。

关于c++ - 带有整数参数的 std::pow,与整数类型进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26941558/

相关文章:

c++ - 无法从 gethostname 访问 IP 地址的内存

C++ 访问子类中的数据

c++ - 这个 float 公式是什么意思?

c++ - 根据模板参数有条件地定义模板类的构造函数

c++ - SDL鼠标按钮不一致

c++ - 如果在并行部分执行会抛出错误吗?

c++ - 使用 decltype(this) 获取函数引用

c++ - 在没有特定容器时检查迭代器是否未分配给项目

c++ - unsigned(-0.0) 的行为是否在 C++ 中定义?

检查 double 的条件是一个整数不起作用