相关疑难解决方法(0)

将浮点数与零进行比较

C++ FAQ lite "[29.17]为什么我的浮点比较不起作用?" 建议这个相等测试:

#include <cmath>  /* for std::abs(double) */

inline bool isEqual(double x, double y)
{
  const double epsilon = /* some small number such as 1e-5 */;
  return std::abs(x - y) <= epsilon * std::abs(x);
  // see Knuth section 4.2.2 pages 217-218
}
Run Code Online (Sandbox Code Playgroud)
  1. 这是否正确,这意味着唯一等于零的数字是+0-0
  2. 当测试零或者测试时,是否应该使用此功能|x| < epsilon

更新

正如Daniel Daranas所指出的那样,最好调用函数isNearlyEqual(我关心的是这种情况).

有人指出了这个链接,我想更加突出地分享.

c++ floating-point

52
推荐指数
5
解决办法
8万
查看次数

带有整数参数的 std::pow,与整数类型相比

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

我的问题如下:

将整数类型与 a 的结果进行比较有多安全std::pow(int1, int2)?例如,if下面的计算结果可以为 true 吗?

std::size_t n = 1024;
if(n != std::pow(2, 10))
    cout << "Roundoff issues..." << endl;
Run Code Online (Sandbox Code Playgroud)

也就是说,rhs 上的结果是否可能类似于 1023.99...9,因此转换为 size_t 时会变成 1023?

我的猜测是,答案是否定的,但我想确切地知道。我在检查矩阵维数等时使用这种比较,并且我不想std::round在任何地方使用 a 。

c++ floating-point c++11 floating-point-conversion

4
推荐指数
1
解决办法
1571
查看次数