Получение NaN, казалось бы, без причины - PullRequest
0 голосов
/ 09 октября 2019

Я пишу программу для оценки 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

...