在C / C ++中,每个人都知道来自sqrt
/ math.h
的{{1}}函数 - 它返回其参数的平方根。当然,它必须有一些错误,因为不是每个数字都可以精确存储。但我保证结果有一定的精确度吗?例如,'它是可以用浮点类型表示的平方根的最佳近似值cmath
如果计算结果的平方,它将使用给定的浮点类型尽可能接近初始参数`?
C / C ++标准是否有相关内容?
答案 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的地方。特别是,如果可以精确地存储结果,那么它应该是。