Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Сотни статей помогут создать торгового робота. Заходи и изучай!
MetaQuotes Software Corp.
Модератор
180308
MetaQuotes Software Corp. 2008.08.08 08:08 

Pi:

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

Author: Prival

Alexandr
1916
Alexandr 2008.08.08 12:27  

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

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

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

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

Parabellum
786
Parabellum 2008.08.10 00:03  

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

Rustamzhan Salidzhanov
7680
Rustamzhan Salidzhanov 2008.08.10 05:15  

#define ABC          100
#define PI           0.314

#define COMPANY_NAME "MetaQuotes Software Corp."

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

Prival
4536
Prival 2008.08.11 15:15  

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

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

Владимир
1402
Владимир 2008.08.17 23:21  

Надо иметь ввиду тот факт, что в 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));
Prival
4536
Prival 2008.09.03 20:34  
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, то расчеты не верные будут. Я проверял число и довольно глубоко, все совпадает

Владимир
1402
Владимир 2008.10.13 00:09  

Да, действительно, точность вполне, проверял: 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));

С уважением,

Владимир

Alexey Subbotin
4998
Alexey Subbotin 2008.11.15 21:57  
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);
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий