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

时间:2014-03-07 19:57:23

标签: c precision floating-accuracy math.h sqrt

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

C / C ++标准是否有相关内容?

2 个答案:

答案 0 :(得分:8)

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

  

定义__STDC_IEC_559__的实现应符合本附件中的规范。

  

sqrt中的<math.h>函数提供IEC 60559平方根操作。

IEC 60559(相当于IEEE 754)讲述了sqrt等基本操作:

  

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

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

答案 1 :(得分:1)

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