为什么这个正双的绝对值等于零?

and*_*epd 0 c++ floating-point c-standard-library

我有一个功能工作vector <vector <double> >.在某些时候,我想在比较中使用元素的绝对值,并且我得到了错误的行为,所以我放入以下调试行:

std::cout << M[3][2] << " " << abs(M[3][2]) << "\n";
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,输出是:

0.667 0
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

Bri*_*ian 8

你可能正在调用or中定义的整数重载之一,因此你的参数被截断了.abs<stdlib.h><cstdlib>

你应该#include <cmath>拿起浮点重载.