![](/img/trans.png)
[英]Calculating sin function with JAVA BigDecimal -monomial is going bigger(?)
[英]Making a custom Sin() function in Java
我必須在Comp Sci類中從頭開始創建sin函數,我正在接近解決方案。 但是,我仍然遇到一些問題。 如果我輸入的值為.5PI或更低,它可以工作,但否則我得到的結果不正確。 這是我到目前為止的代碼:
double i=1;
double sinSoFar = 0;
int term = 1;
while(i >= .000001)
{
i = pow(-1, term + 1) * pow(sinOf, 2*term-1) / factorial(2*term-1);
sinSoFar=sinSoFar + i;
term++;
}
就像Federico指出的那樣,問題可能出在你的factorial()或pow()中。 我運行了一個測試,它可以用Math類中提供的pow()函數替換你的函數,並且這個factorial():
public static long factorial(long n) {
if (n < 0) throw new RuntimeException("Underflow error in factorial");
else if (n > 20) throw new RuntimeException("Overflow error in factorial");
else if (n == 0) return 1;
else return n * factorial(n-1);
}
一些建議:
編輯。 建議:一旦計算了第k個項,就可以通過以下方式計算第(k + 1)項:
通過這種方式,您可以完全避免功率和階乘的計算。
對於0 - 1 / 2PI之外的值,它們都可以從范圍內的值計算。
// First, normalize argument angle (ang) to -PI to PI,
// by adding/subtracting 2*PI until it's within range
if ( ang > 1/2PI ) {
sin = sin ( PI - ang );
}
else if ( ang < 0 ) {
sin = -1 * sin( -1 * ang );
}
else {
// your original code
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.