Chudnovsky Algorithmus in C?

1 Antwort

if (i) {
      fac = fac * i;
    }

Was soll denn das If hier tun?

 for (int i = 1; i<=n; i++) {

Wenn du sowieso mit einem Double vergleichst, warum dann nicht auch ein Double als Zählvariable, im Endeffekt würdest du dir dadurch casts ersparen.

term = (powl((-1.00), n) * fact(6.00*n) * (545140134.00*n + 13591409)) / (fact(3.00*n) * powl(fact(n), 3.00) * powl(640320.00, 3*n+3/2));

Sollte hier nicht die Zählvariable irgendwo vorkommen?

powl((-1.00), n)

Mach doch ein en Check of n größer oder kleiner 0 ist, dann ersparst du dir die fehleranfällige Potenzberechnung. Oder wechsle einfach in jedem Schleifendurchlauf einmal das Vorzeichen.

Zu deinem Fehler: Wenn da Nan oder Infinity rauskommt, dann taucht das an irgendeinem Punkt im Programm auf und setzt sich dann fort. Wo das auftritt müsstest du herausfinden.
Auch kann es passieren, dass Zahlen womöglich zu groß oder zu klein werden und so zu diesem Fehler führen.