|

楼主 |
发表于 2012-3-7 18:53
|
显示全部楼层
已知,sin(x)的值,现在求sin(x^n)的值
回楼上:误差是很大的.这里我把我在贴吧里的一个解释复制如下,如果有出错的地方可以指正。
解释:
设x^n=(2π)*N+M 在这里M是在[0,2π)之间.则sin(x^n)=sin(M),设我们计算机里面的π的数据是pi,则
A:x^n/(2*pi)=N*π/pi+M/(2*pi)
由于x^n是非常大的一个数,则x^n/(2*pi)也是一个非常大的数,而M/(2*pi)是属于[0,1),即M/(2*pi)相对于N*π/pi小很多,所以A式可以化成
B:x^n/(2*pi)=N*π/pi
现在我们来令pi等于真实的π与非真实的pi来作比较,看下x^n/(2*pi)的误差。
C:|x^n/(2*π)-x^n/(2*pi)|=|N*π/π-N*π/pi|=|N*(pi-π)/pi|=|(N/pi)*(pi-π)|
对于C式,由于N很明显是一个很大的数据,则令L=N/pi明显也是一个很大的数据,我们这里令K=|pi-π|,则C式化成
D:|x^n/(2*π)-x^n/(2*pi)|=L*K
注意到了吗,在一般的计算机里,pi=3.14159265358979,按这个值来算K恐怕得大于10^(-15)
但是L可能是百上千位的。那它们相乘的结果也必定是大数量级的,即这个误差很大。这样x^n/2π已经失效。
当然,即使你增加pi的位数,使K变得更小,但是pi的位数毕竟是有限的。对于未知的x^n来说,出现的L也是未知的,即L*K仍然很大可能是大数量级的。所以我没有考虑这个方法计算大数的正弦值
|
|