是否保证static_cast
用于x*x不溢出的所有正x?
如果不是,我该如何稳健地计算这些数字的平方根呢?
来自CPPreference:
std::sqrt
是IEEE标准所要求的。 唯一需要精确的其他操作是算术运算符和函数std::fma
。 舍入到返回类型后(使用默认舍入模式),std::sqrt
的结果与无限精确的结果无法区分。 换句话说,误差小于0.5ULP。 其他函数,包括std::pow
,则没有这样的约束。 (参考)
所以考虑到你的限制,我看不出有什么担心的理由。