Ну, у этой программы много проблем;но хуже всего то, что вы используете серию Грегори, которая является чуть ли не самым медленным алгоритмом.Вы даже не получите двойной точности с этим, не говоря уже о длинной двойной.Вы должны были бы позволить ему пройти около 10 16 шагов только для удвоения.
Математики используют -1 n , чтобы указать переменный знак, что прекрасноконтекст, но использовать pow()
для его вычисления просто глупо, тем более что это операция с плавающей запятой.Вместо этого используйте целое число, которое начинается с -1, и продолжайте делать i = -i
.
. Вам нужно быть более осторожным с вашими типами и константами.4L
- это длинное целое число, а не длинный двойной.Вы хотите 4.0L
.Конечно, компилятор все равно его использует, но это плохая практика.Вы используете простые старые двойные константы, такие как 4.0, когда стремитесь к длинной двойной точности.
Глупо продолжать умножать все на 4.0 на каждом шаге.Вы можете просто сделать это в конце.