我已经尝试了几天,徒劳地寻找GNU GCC编译器的Math函数(在math.h中)的准确性。C99标准指出,math.h中数学函数的精度要求是由实现定义的。我在GNU GCC的编译器手册中找不到任何关于这方面的内容。有人能回答这个问题吗?
发布于 2012-02-10 02:56:10
math.h函数是GNU C库的一部分,而不是GCC编译器。它们的准确性是作为GNU C Library manual的一部分记录在here中的。
发布于 2015-03-02 07:46:38
唯一安全的假设是glibc数学精度图表中的'-‘字符:
http://www.gnu.org/software/libc/manual/html_node/Errors-in-Math-Functions.html#Errors-in-Math-Functions
意思是“未测试”,因为缺乏官方文件表明不是这样的。
发布于 2015-04-12 14:11:20
错误确实列出了here,但我认为"-“意味着”正确四舍五入“的假设(即1/2ULP)几乎肯定会被页面顶部的声明驳斥
GNU库的目标不是数学库中函数的正确舍入结果...相反,没有完全指定结果的函数的准确性目标如下;一些函数有bug,这意味着它们在所有情况下都不能满足这些目标。将来,GNU C库可能会提供一些其他正确的四舍五入函数,例如建议对ISO C进行扩展的crsin。
在研究了一下源代码之后,我发现似乎是the results of a ulp test (针对x86-64)。看起来,对于默认的舍入模式(四舍五入到最近,平局到偶数),他们只在long double (80位IEEE)的ULP值比float差时才显式测试double。隐含的假设似乎是double不会比long double更糟糕。对于定向舍入模式,它们似乎总是显式地测试float和double。
不过,也有一些奇怪的地方。
exp.cos和tan的测试结果,它们只测试真实/复杂的测试结果https://stackoverflow.com/questions/9216851
复制相似问题