提问人:kacerekz 提问时间:3/26/2018 更新时间:3/26/2018 访问量:265
Java 中 Math.sin() 常见角度的准确性
Accuracy of Math.sin() in Java for common angles
问:
我有两种计算sin(pi)导数的方法,它适用于uni - 一种使用通用的数值微分公式,另一种我重写如下:
// h = 1e−16 (part of assignment)
// f'(x) ~= (f(x+h)-f(x))/h for sin(x)
public static double differentiateSin(double x) {
return (Math.sin(x+h)-Math.sin(x))/h;
}
// using trigonometry
public static double differentiateSin2(double x) {
return (2* ( Math.sin(h/2) * Math.cos(x+h/2) ) ) /h;
}
我知道浮点数不能精确表示,更不用说圆周率了,令我惊讶的是,我用第二种方法得到了相当精确的结果,而第一种方法完全偏离了轨道!
Math(cos(Math.pi)) 给出了一个精确的 -1.0,我想没关系,这是一个共同的角度 - 但我无法弄清楚是什么让这些方法之间存在如此大的差异。还有更多的操作,我没有摆脱罪恶和cos,但我得到了完美的结果。
此外,使“h”变大会产生更合理的结果......那里会发生什么?
答: 暂无答案
评论
h
h
double