- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Fortran 中创建一个程序,它以弧度表示 sin(x) 的 x,然后是要计算的项数。
这是我的程序:
! Sine value using MacLaurin series
program SineApprox
implicit none
integer :: numTerms, denom, i
double precision :: x, temp, summ
! Read Angle in Radians, and numTerms
read(*,*) x, numTerms
! Computing MacLaurin series
denom = (2*numTerms)-1 !Gives denominator
temp = x !Temp calculates each term
summ = x
do i = 3, denom, 2
temp = (((-temp)*(x**2))/(i*(i-1)))
summ = summ + temp
end do
print *, summ
end program SineApprox
但是,我没有得到我的教授要求输入的相同值:5 30
我的代码的输出是:
-0.95892427466314001
但是,所需的输出是:
-0.95892427466313568
^^^^
我不知道错误在哪里。
最佳答案
I can't figure out where the error is.
一个高精度的sine(5.0)
是-0.95892427466313846889...
OP 的结果比 Prof 的要好。
OP 的结果与最佳答案相差 14 ULP,而 Prof 的结果与最佳答案相差 25 ULP。
所以对 OP 来说没有问题。要获得与教授的答案完全匹配的结果,您必须编写一种劣等方法。
教授较差答案的一个简单可能原因是,如果教授的代码仅在 i<=30
(15 个术语,而不是 30 个术语)时循环 - 这几乎可以解释差异。尝试使用迭代次数较少的代码,看看哪些迭代次数最接近教授的答案。
// sine(5.0) Delta from correct Source
//
//-0.95892427466313846889... 0 000000 calc
//-0.95892427466313823 -23 889... chux (via some C code)
//-0.95892427466314001 +154 111... OP
//-0.95892427466313568 -278 889... Prof
// 0.00000000000000089 +/-89 ... ulp(5.0)
// 0.00000000000000011 +/-11 ... ulp(-0.9589)
// 12345678901234567(digit count)
注意事项:
在 x == 5.0
附近,大约在第 17 项之后,temp
项非常小,不会显着影响结果。所以肯定使用了足够多的术语。
对于普通的FP表示,5的最后一位的单位是~89e-17。如果是 ~11e-17,则 -0.9589 的 ULP。
关于floating-point - 使用 MacLaurin 展开的 Fortran Sine 函数的微小差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50391716/
我需要以给定的精度(例如 0.0001)近似 (1-x)^0.25。我正在使用 expansion found on Wikipedia对于 (1+x)^0.25。当当前表达式小于精度时,我需要停止近
如何编写一个递归静态方法,通过使用以下递归公式,使用 (n+1) 项 MacLaurin 级数来计算 e^x,称为 e(x,n): e(x,0)= 1 e(x,n)= e(x,n-1) + x^n/n
我正在 Fortran 中创建一个程序,它以弧度表示 sin(x) 的 x,然后是要计算的项数。 这是我的程序: ! Sine value using MacLaurin series program
我需要编写一个递归java方法来计算带有签名的e^x,称为e(x,n), public static double eThree(double x, long n) 并且它必须使用 MacLaurin
我是一名优秀的程序员,十分优秀!