提问者:小点点

C++:static_cast<int>std::sqrt(x)是否总是给出正方形正整数的精确结果? [副本]


是否保证static_cast(std::sqrt(x*x))==x用于x*x不溢出的所有正x?

如果不是,我该如何稳健地计算这些数字的平方根呢?


共1个答案

匿名用户

来自CPPreference:

std::sqrt是IEEE标准所要求的。 唯一需要精确的其他操作是算术运算符和函数std::fma。 舍入到返回类型后(使用默认舍入模式),std::sqrt的结果与无限精确的结果无法区分。 换句话说,误差小于0.5ULP。 其他函数,包括std::pow,则没有这样的约束。 (参考)

所以考虑到你的限制,我看不出有什么担心的理由。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|static_cast|int|std|sqrt|x|给出|正方形|正整数|精确|副本)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?