MQL4 - automated forex trading   /  

Форум

Вопрос к разработчикам

К списку тем Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

avatar
403
drknn 30.08.2007 07:43 
Читаем справку по MQL4 в редакторе терминала. Цитирую:

double MathCeil( double x)
Функция возвращает числовое значение, представляющую наименьшее целое число, которое больше или равно x.

Возникает резонный вопрос. Если функция возвращает целое и только целое число, тогда пуочему она сама имеет тип double?
article

Эксперты на основе популярных торговых систем и алхимия оптимизации торгового робота (Продолжение)

В данной статье автор продолжает обзор алгоритмов реализации простейших торговых систем и знакомит с некоторыми, актуальными подробностями использования результатов оптимизаций. Статья будет полезна начинающим трейдерам и начинающим экспертописателям


avatar
6797
Mathemat 30.08.2007 08:17 
Например, потому, что аргумент может выходить за пределы типа int. Скажем,

Print( MathCeil( 1234567891011234.56 ) );
выдает результат 1234567891011235. Это число явно больше любого числа типа int. Ну а если нужен результат целого типа - тебе никто не мешает. ..

Могу привести еще один "странный" пример: iVolume(), функция, тип возвращаемого значения которой - double. Причина та же.

avatar
6584
Integer 30.08.2007 09:01 
drknn писал (а):
Читаем справку по MQL4 в редакторе терминала. Цитирую:

double MathCeil( double x)
Функция возвращает числовое значение, представляющую наименьшее целое число, которое больше или равно x.

Возникает резонный вопрос. Если функция возвращает целое и только целое число, тогда пуочему она сама имеет тип double?

Аналогично возникает ризонный вопрос, почемы вы считаете, что она должна быть типа int?

avatar
403
drknn 30.08.2007 10:48 
Mathemat писал (а):
Например, потому, что аргумент может выходить за пределы типа int. Скажем,

Print( MathCeil( 1234567891011234.56 ) );
выдает результат 1234567891011235. Это число явно больше любого числа типа int. Ну а если нужен результат целого типа - тебе никто не мешает. ..

Могу привести еще один "странный" пример: iVolume(), функция, тип возвращаемого значения которой - double. Причина та же.

выдает результат 1234567891011235 - но ведь число ЦЕЛОЕ!!!


avatar
403
drknn 30.08.2007 10:51 
Integer писал (а):

Аналогично возникает ризонный вопрос, почемы вы считаете, что она должна быть типа int?

Кгода пишем подпрограмму, если она возвращает нам целое число, мы объявляем подпрограмму, как имеющую целочисленный тип. Если не должна ни чего возвращать, то мы объявляем её как void.

double MathCeil( double x) является точно такой же подпрограммой с тем лишь отличием, что её создал разработчик, а не пользователь. Просто я не вижу разницы.

avatar
13989
komposter 30.08.2007 10:53 
drknn писал (а):
Кгода пишем подпрограмму, если она возвращает нам целое число, мы объявляем подпрограмму, как имеющую целочисленный тип. Если не должна ни чего возвращать, то мы объявляем её как void.
double MathCeil( double x) является точно такой же подпрограммой с тем лишь отличием, что её создал разработчик, а не пользователь. Просто я не вижу разницы.
Попробуйте написать функцию, аналогичную MathCeil, но типа int, и опробуйте на ней пример Mathemat-а.

avatar
13989
komposter 30.08.2007 10:55 
komposter писал (а):
Попробуйте написать функцию, аналогичную MathCeil, но типа int, и опробуйте на ней пример Mathemat-а.
Или можно даже проще:
int start()
{
   double d = 1234567891011235.0;
   Print( test(d) );
}
int test( double d_val )
{
   int int_val = d_val;
   return(int_val);
}


avatar
13989
komposter 30.08.2007 10:59 
komposter писал (а):
Или можно даже проще
Результат:
2007.08.30 09:55:54 __________ EURUSD,Daily: 1016612515



avatar
6584
Integer 30.08.2007 11:18 
drknn писал (а):
Integer писал (а):

Аналогично возникает ризонный вопрос, почемы вы считаете, что она должна быть типа int?

Кгода пишем подпрограмму, если она возвращает нам целое число, мы объявляем подпрограмму, как имеющую целочисленный тип. Если не должна ни чего возвращать, то мы объявляем её как void.

double MathCeil( double x) является точно такой же подпрограммой с тем лишь отличием, что её создал разработчик, а не пользователь. Просто я не вижу разницы.

а это функция обрабатывающая число дабл и поэтому возвращает дабл. Проблем меньше будет, вот если возвращала инт, вот тут бы реально завыли

avatar
6797
Mathemat 30.08.2007 11:33 
На самом деле совсем несложно написать и функцию, возвращающую "целое" 1234567891011235, но для него придется придумывать его представление, например, в двоичной системе счисления. Разумеется, это будет уже не тип int, а некий массив цифр этого числа. Но для работы с подобными большими целыми числами придется придумывать целую библиотеку. Потренируйся, drknn, если интересно.

avatar
403
drknn 30.08.2007 13:00 
Спасибо всем за разъяснения.
Скрипт komposter-а так вообще убил во мне все сомнения напрочь. :)
Mathemat, если честно, то панически не хватает времени, поэтому и выходишь вот так на форум и спрашиваешь у тех, кто знает.
Ну и конечно, стараешься задавать вопросы по-делу, а не фигню всякую.
К списку тем  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий