我偶然发现了这段代码(链接)。
Generators doubleSquares(int value)
{
Generators result;
for (int i = 0; i <= std::sqrt(value / 2); i++) // 1
{
double j = std::sqrt(value - std::pow(i, 2)); // 2
if (std::floor(j) == j) // 3
result.push_back( { i, static_cast<int>(j) } ); // 4
}
return result;
}
我想知道//3是否危险?
std::floor
返回一个整数值(尽管在float
或double
中),所有整数都可以被准确地表示,不会出现会影响小数值的轻微误差。 - Joe