我正面临tan / atan方法在C中的数值精度问题。我想我在这里想念什么,但我不知道是什么。
我在下面附加了我所引用的代码,该代码尝试根据一系列数字(a
,b
和m6
)是应用于这些角度的三角函数(如代码注释所示),然后我反转这些角度以重建m7
,m8
和m6
并将它们与原始数字进行比较,因为我正在使用m7
数字,所以我希望它们与第14位或第15位数字匹配。但是,从输出中可以看到,对于m8
情况,有些数值差异无法解释。有谁对正在发生的事情有见识?
double
您可以从以下键盘执行此链接中的代码:http://codepad.org/lzMMcgnb
atan
答案 0 :(得分:4)
根据经验,作为标准C库实现附带的三角函数中的任何错误(在第8个重要版本开始)都应视为正常。 (以我的经验,sin
和cos
的实现比tan
的实现更好,这也适用于反函数。)
C标准和IEEE754浮点规范(C浮点采用的通用方案)都不需要这些功能与其使用的数据类型一样精确(参见sqrt
或算术运算符{ IEEE754需要使用{1}},+
,-
和*
返回最佳结果。而且很多实现方式都要求执行速度而不是准确性。
如果需要更高的精度,则需要将这些功能切换为保证更好结果的功能。