Russian Qt Forum
Ноябрь 22, 2024, 23:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вычисление 3200 знаков числа Пи  (Прочитано 1314 раз)
alexu007
Чайник
*
Offline Offline

Сообщений: 58


Просмотр профиля
« : Май 03, 2022, 21:02 »

Алгоритм не мой, я только "перелицевал" его с С на Qt C++. Как работает - не знаю. Но работает. 3200 знаков вычисляет за доли секунды (на моём компе).

Оригинал программы на С:
Код
C
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a, f[b]=d%--g,d/=g--,--b;d*=b);}

Код программы на С++. Хедер не выкладываю, там только слот кнопки.

Код:
#include "widget.h"
#include "ui_widget.h"



Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QObject::connect(ui->pbtn_01,SIGNAL(clicked()),this,SLOT(press_pbtn_01()));
}



Widget::~Widget()
{
    delete ui;
}




void Widget::press_pbtn_01()
{
    quint64 a = 10000;
    quint64 b;
    quint64 c = 11200;    //2800 5600 11200 22400 89600 112000
    quint64 d;
    quint64 e = 0;
    quint64 f[11201];     //2801 5601 11201 22401 89601 112001
    quint64 g;

    quint32 x;
    quint32 cx = 0;

    QString str;

    //заполняет массив значением а/5 = 2000
    for (b = 0; b < c+1; b++) f[b] = a/5;

    //вычисление
    while(c)
    {
        d = 0;
        g = c * 2;

        for (b = c; b > 1; b--)
        {
            d += f[b] * a;
            g--;
            f[b] = d % g;
            d /= g;
            g--;
            d *= b;
        }

            x = e + d/a;

            // строка для вывода на экран
            // добавляется по 4 цифры
            // дополняется спереди нулями до 000X
            str += QString::number(x).rightJustified(4, '0');

            // число знаков
            cx++;

        c -= 14;
        e = d % a;
    }


    ui->label_02->setText(QString::number(cx*4));
    ui->textEdit->append(str);
}

Записан
alexu007
Чайник
*
Offline Offline

Сообщений: 58


Просмотр профиля
« Ответ #1 : Май 04, 2022, 19:02 »

Алгоритм реализует вычисления по формуле, приведённой ниже. Вот всё, что удалось накопать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.058 секунд. Запросов: 22.