Кстати, да, на мой взгляд, логичнее было бы в 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
Дело в том, что в экспертах в основном производятся математические
расчёты, где ошибки в арифметике страшнее, чем проблемы с производительностью.
Оптимизацией можно заняться и потом, -- главное, чтобы считало
правильно.
Тут еще дело в том, что MQL делался по подобию С. Если сделать другое
приведение типов, то у многих, кто программирует на С, могут возникнуть такие
же проблемы как у меня сегодня. :) С непривычки. Поэтому имеющаяся
схема приведения типов теперь мне кажется вполне логичной.
Если ты делить собираешься то лучше не использовать int. Ибо деление
само по себе редко в результат выдаст тоже int. А тут дело имеешь
с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные
int вообще практически, если только надо какой нить признак который
имеет не два значения)
У меня прокол получился при таком выражении (примерно):
Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double
Не раз накалывался в больших математических выражениях. Приходится
кроме отладки основного кода заниматься ещё и отладкой правильности
приведения типов. А ведь можно и запросто не заметить.
Может хоть в MQL разработчики реализовали бы такую фичу?
Если ты делить собираешься то лучше не использовать int. Ибо деление
само по себе редко в результат выдаст тоже int. А тут дело имеешь
с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные
int вообще практически, если только надо какой нить признак который
имеет не два значения)
Проблема не том, что лучше, а что хуже и что делать, чтобы не допускать
ошибок. Просто любой нормальный человек при делении целого
числа на целое в результате получает дробное, кроме загадочного
C++ (и как следствие MQL), в который данный казус попал из ассемблера
и по соображениям производительности. Такое трактование деления
чревато ошибками в больших математических выражениях, что является
критичным для MQL.
Если ты делить собираешься то лучше не использовать int. Ибо деление
само по себе редко в результат выдаст тоже int. А тут дело имеешь
с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные
int вообще практически, если только надо какой нить признак который
имеет не два значения)
У меня прокол получился при таком выражении (примерно):
MathRand() имеет выходной параметр int, и этот параметр объявил не
я :). Поэтому я и не заметил по-началу этого прикола. Пришлось
сделать так:
double d=MathRand();
d=d/32767*Int_;
Во-во, а иногда приходится конкретно париться и вместо простой
на вид математической формулы заводить кучу дополнительных
double переменных и разбивать, казалось бы, лаконичную формулу
на несколько частей. А всё из-за недружественности языка.
Скажите, в языке С такая же схема приведения типов? То есть 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 переменных и разбивать, казалось бы, лаконичную формулу на несколько частей. А всё из-за недружественности языка.