窦我的意思是这里c stdlib sin()/ fpu assembl; y fsin。
我可以用大约16位小数给出这个正弦参数 数字presision或更多,例如sin(1.1e-14); 罪(1.2e-14)然后得到结果,
在如此小的三角洲上,窦几乎是线性的,但尽管如此 它也可以用相同的16位精度计算, 是否也可以在这么小的增量上进行计算?(我问这个问题,因为有一段时间我似乎有点不寻常 在参数和特别是输出中计算它的精确度 价值,所以我想知道它是不是减少了什么)
答案 0 :(得分:2)
泰勒系列sin(x)= x - x ^ 3/3! + x ^ 5/5! - ......
任何数字0> x > 1在基数10中表示为
x = a * 10 ^ -n,其中1 <= a <10,例如x = 0.003 = 3 * 10 ^ -3
x ^ 3 = a ^ 3 * 10 ^ -3n
那么下一个术语的大小约为b * 10 ^ -3n(忽略阶乘)。 当 n 增长(或 x 接近零)时,下一个术语开始消失得相当快。
对于x = 0.003,少数第一项是
0.003000000000000000 = 10^-3 * 3000000000000000 <-- x
- 0,000000004500000000 = 10^-3 * 0000004500000000 <-- x^3/3!
+ 0,000000000000002025 = 10^-3 * 0000000000002025 <-- x^5/5!
---------------------- -----------------------------
= 0.002999995500002025 = 10^-3 * 2999995500002025
有16位数字忽略前导零和第4项x ^ 7/7!不再影响结果。当x变得更小时,接下来是x ^ 5/5!术语不能添加到结果中,最后是x ^ 3/3!术语不能添加(或减去)。只有术语x可以用16位精度表示。
sin(x)= x仅适用于x = 0。究竟。其他一切都是近似的。 即使sin(pi / 2)= 1也是数学库中的近似值,因为参数pi / 2不能表示为浮点数。
答案 1 :(得分:2)
详细信息可以在http://www.intel.com/design/processor/manuals/253665.pdf下的8.1.3.2条件代码标志下阅读,指定FSIN和朋友的限制。