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的地方。 特别是,如果可以精确地存储结果,那么它应该是。