Скрипты: Pi

 

Pi:

расчет числа пи

Author: Prival

 

привет! спасибо!

сможешь сделать так

я задаю число(комбинация цифр) допустим: 29856234563405863458

а скрипт находит это число в своей цепочке (+можно добавить на каком месте определилось эта комбинация цифр)

 

А вот тут разработчики запросто переопределили этот самый Пи  :)

 

#define ABC          100
#define PI           0.314

#define COMPANY_NAME "MetaQuotes Software Corp."

ничего не скажеш, ну , просто красавцы :)

 

Дело вот в чем, для работы нескольких своих индикаторов я использую БПФ, все расчеты производил в MathCad, при подготовке к чемпионату начал все переносить на MQL. В качестве БПФ использую вот эту библиотеку http://codebase.mql4.com/ru/code/9696. Столкнулся с тем, что расчеты отличаются, и после долгих поисков нашел, что отличия заключены в точности задания числа Pi. Нашел алгоритм его расчета и привел, возможно кому то и пригодиться.

В приведенном варианте (глубине расчета) Pi совпадает со встроенной константой Pi в MathCad.

 

Надо иметь ввиду тот факт, что в MQL4 все функции имеют ограниченную точность вычислений после запятой. После 9 знака может быть мусор.

В Вашем случае это также буде иметь место.

   for(int i=0; i<11; i++) Pi+= 1/MathPow(16,i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6));
 
VBAG:

Надо иметь ввиду тот факт, что в MQL4 все функции имеют ограниченную точность вычислений после запятой. После 9 знака может быть мусор.

В Вашем случае это также буде иметь место.

   for(int i=0; i<11; i++) Pi+= 1/MathPow(16,i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6));

нужно doulbe i, так как сделано у меня в скрипте. Если int, то расчеты не верные будут. Я проверял число и довольно глубоко, все совпадает

 

Да, действительно, точность вполне, проверял: 3.141592653589793!

Но, на мой взгляд, инкремент с даблом ну никак не вяжется. Все дело в автоматическом приведении типов, так работает: 

   for(int i=0; i<11; i++) 
      Pi+= 1/MathPow(16,i)*(4.0/(8*i+1)-2.0/(8*i+4)-1.0/(8*i+5)-1.0/(8*i+6));

С уважением,

Владимир

 
VBAG:

Да, действительно, точность вполне, проверял: 3.141592653589793!

Но, на мой взгляд, инкремент с даблом ну никак не вяжется. Все дело в автоматическом приведении типов, так работает:

   for(int i=0; i<11; i++) 
      Pi+= 1/MathPow(16,i)*(4.0/(8*i+1)-2.0/(8*i+4)-1.0/(8*i+5)-1.0/(8*i+6));

С уважением,

Владимир

Ну, блин, вы бы еще пи через интегралы вычислять стали!!!

pi = 4*MathArctan(1);
Причина обращения: