Я пишу программу для оценки sin (x) с использованием ее полиномиального расширения Тейлора. Я рассчитываю первые 100 сроков расширения. Это выглядит так:
sin(x) = x - x^3/3! + x^5/5! - ...
и так далее. Моя программа компилируется, но я получаю NaN
для любого ввода x
. Int fac - это факториал того, что n есть в данный момент, что определяется циклом for, вложенным в цикл while. Я думал, что NaN
было вызвано fac, равным 0, так как сумма включает деление на fac. Я не понимаю, как это может быть проблемой.
public class deleteThis {
public static void main(String[] args) {
double x=Double.parseDouble(args[0]);
double sum=0.0;
int n=1;
double neg1=1;
int fac=1;
while (n<100) {
fac=1;
for (int i=1; i<n; i++) {
fac=fac*i;
}
sum+=neg1*Math.pow(x,n)/fac;
n+=2;
neg1=-neg1;
}
System.out.println(sum);
}
}
$ javac deleteThis.java
$ java deleteThis 1.0
NaN
$java deleteThis 100
NaN