![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Скажите, в языке С такая же схема приведения типов? То есть double d=1/2 дает в ответе ноль в языке С?
Скажите, в языке С такая же схема приведения типов? То есть double d=1/2 дает в ответе ноль в языке С?
Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double
Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.
Может хоть в MQL разработчики реализовали бы такую фичу?
Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double
Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.
Может хоть в MQL разработчики реализовали бы такую фичу?
Категорически нет. Арифметика с плавающими числами на несколько порядков(!) медленнее целочисленной арифметики.
Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double
Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.
Может хоть в MQL разработчики реализовали бы такую фичу?
Если ты делить собираешься то лучше не использовать int. Ибо деление само по себе редко в результат выдаст тоже int. А тут дело имеешь с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные int вообще практически, если только надо какой нить признак который имеет не два значения)
Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double
Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.
Может хоть в MQL разработчики реализовали бы такую фичу?
Категорически нет. Арифметика с плавающими числами на несколько порядков(!) медленнее целочисленной арифметики.
Ну так что мешает завести ещё одну операцию -- целочисленное деление? Например, a div b
Дело в том, что в экспертах в основном производятся математические расчёты, где ошибки в арифметике страшнее, чем проблемы с производительностью. Оптимизацией можно заняться и потом, -- главное, чтобы считало правильно.
Если ты делить собираешься то лучше не использовать int. Ибо деление само по себе редко в результат выдаст тоже int. А тут дело имеешь с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные int вообще практически, если только надо какой нить признак который имеет не два значения)
У меня прокол получился при таком выражении (примерно):
double d=MathRand()/32767*Int_;
MathRand() имеет выходной параметр int, и этот параметр объявил не я :). Поэтому я и не заметил по-началу этого прикола. Пришлось сделать так:
double d=MathRand();
d=d/32767*Int_;
Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double
Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.
Может хоть в MQL разработчики реализовали бы такую фичу?
Если ты делить собираешься то лучше не использовать int. Ибо деление само по себе редко в результат выдаст тоже int. А тут дело имеешь с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные int вообще практически, если только надо какой нить признак который имеет не два значения)
Проблема не том, что лучше, а что хуже и что делать, чтобы не допускать ошибок. Просто любой нормальный человек при делении целого числа на целое в результате получает дробное, кроме загадочного C++ (и как следствие MQL), в который данный казус попал из ассемблера и по соображениям производительности. Такое трактование деления чревато ошибками в больших математических выражениях, что является критичным для MQL.
Если ты делить собираешься то лучше не использовать int. Ибо деление само по себе редко в результат выдаст тоже int. А тут дело имеешь с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные int вообще практически, если только надо какой нить признак который имеет не два значения)
У меня прокол получился при таком выражении (примерно):
double d=MathRand()/32767*Int_;
MathRand() имеет выходной параметр int, и этот параметр объявил не я :). Поэтому я и не заметил по-началу этого прикола. Пришлось сделать так:
double d=MathRand();
d=d/32767*Int_;
Во-во, а иногда приходится конкретно париться и вместо простой на вид математической формулы заводить кучу дополнительных double переменных и разбивать, казалось бы, лаконичную формулу на несколько частей. А всё из-за недружественности языка.