При осуществлении алгоритма SPIGOT для PI выводит не совсем корректный результат
Мне нужно реализовать алгоритм SPIGOT для вычисления числа π, все хорошо, вот только в одном месте возникла неточность, программа выводит 3,141592653589793238462643383279410288419, а должно быть в этом месте 3,14159265358979323846264338327950288419, не знаю, что делать, походу программа пропускает одно из условий, помогите, пожалуйста, это срочно
using namespace std;
int main() {
int oper;// Инициализация переменной для подсчета операций
int proverka;// Инициализация переменной для работы с недействительными числами
int kol; // Инициализация перменной для количества требуемых выводимых цифр числа ПИ
int umnoz;// Инициализация перменной для умножения на 10 в процессе вывода числа
int summa;// Инициализация перменной для суммирования в цикле
int size;// Инициализация перменной размера массива
int nedeyst;// Инициализация перменной для подсчета недействительных чисел
int result;// Инициализация перменной для вывода каждого цифры в числе ПИ
int a;// Инициализация перменной для подсчета итераций
nedeyst = 0; //Переменная для счета недействительных цифр
result = 0; //Задаем начальное значение переменной для переноса
a = 0; //Задаем начальное значение переменной для подсчета итераций в цикле
oper = 0; //Задаем начальное значение переменной для подсчета простых арифметических операций в цикле
cout << " " << "SPIGOT algorithm for calculating the number of PI"<< " " << endl; //вывод названия программы
cout << "Required number of digits of PI: "; //Выводим надпись "Требуемое количество знаков числа ПИ:"
cin >> kol; //Принимаем значение количества цифр
size = 10 * kol / 3; //Обозначаем значение количества выделяемых ячеек для массива
int arr[size]; //Инициализация массива для дальнейшей работы
for (int q = 0; q < size; q++) //Цикл для заполнения массива цифрами 2
arr[q] = 2; // Присваиваем значение каждому элементу
for (int e = 0; e < kol; e++) { // Внешний цикл
result = 0; // Присваиваем значению ячейки переноса начальное значение равное 0
for (int i = size; i > 0; i--) { //Вычисление цифры числа пи
umnoz = 10 * arr[i - 1]; //
summa = umnoz + result * i;// сумма произведения последнего элемента массива на 10 и переноса
arr[i - 1] = summa % (2 * i - 1); //Подсчет остатка
result = summa / (2 * i - 1); //Подсчет переноса
oper = oper + 10;//Подсчет ПРОСТЫХ арифметических операций
a = a + 1;// Подсчет итераций в цикле
}
arr[0] = result % 10; //Деление с выводом остатка
result = result / 10; //Подсчет соответствующей цифры из числа ПИ
oper = oper + 2;// прибавление количества операций для работы с первым элементом массива
if (proverka == 10) {//Условия для недействительных чисел и случая с получение 9 и 10
cout << result + 1; //увеличиваем предыдущую на 1
for (int t = 0; t < nedeyst; t++) // цикл для вывода 0, если мы получаем 10
cout << 0; // вывод 0
a = a + 1; // прибавляем количество итераций
nedeyst = 0; // обнуляем переменные
result = 0; // обнуляем переменные
}
else if (proverka == 9) { //Условия для недействительных чисел и случая с получение 9 и 10
nedeyst = nedeyst + 1; // увеличиваем количество недействительных
oper = oper + 1;// увеличиваем количество операций
}
else {
cout << result; //Если мы не получаем 10 или 9
result = proverka; // присваиваем переменной действительную цифру
if (nedeyst != 0) { //если есть недействительные цифры
for (int t = 0; t < nedeyst; t++)
cout << 9; // выводим 9 при нужной цифре числа ПИ
nedeyst = 0;
}
}
}
cout << endl; //Переход на новую строку
cout << "Number of iterations to count " << kol << " digits: " << a << endl; //Вывод надписи о количестве итараций
cout << "The number of simple arithmetic operations for counting " << kol << " digits: " << oper << endl; //Вывод надписи о количестве операций
return 0; // возвращаемое значение функции
}```