C / C ++中sqrt函数的保证精度

每个人都知道C / C ++中math.h / cmath sqrt函数 – 它返回其参数的平方根。 当然,它必须有一些错误,因为不是每个数字都可以精确存储。 但我保证结果有一定的精确度吗? 例如,’它是可以用浮点类型表示的平方根的最佳近似值, or如果计算结果的平方,它将使用给定的浮点类型尽可能接近初始参数?

C / C ++标准有什么关于它的吗?

对于C99,没有具体要求。 但是大多数实现试图尽可能地支持附件F:IEC 60559浮点运算 。 它说:

__STDC_IEC_559__应符合本附件中的规范。

和:

sqrt函数提供IEC 60559平方根操作。

IEC 60559(相当于IEEE 754)说明了像sqrt这样的基本操作:

除了二进制< - >十进制转换之外,每个操作都应该执行,就好像它首先产生一个正确到无限精度和无限范围的中间结果,然后强制这个中间结果以适应目标的格式。

最后一步包括根据几种舍入模式进行舍入,但结果必须始终是目标精度中最接近的可表示值。

正如Chris Dodd在评论部分所注意到的那样,这个问题已在这里得到解答。 简而言之:C ++标准无法保证,但IEEE-754标准保证了结果尽可能接近“实际结果”,即误差小于或等于1/2单位。 -last的地方。 特别是,如果可以精确地存储结果,那么它应该是。