Непонимание приведения типов - страница 3

 
Player_2:

Скажите, в языке С такая же схема приведения типов? То есть double d=1/2 дает в ответе ноль в языке С?
Да.
 
stringo:
Player_2:

Скажите, в языке С такая же схема приведения типов? То есть double d=1/2 дает в ответе ноль в языке С?
Да.

Хм, на Делфи не так. Ну спасибо еще раз, буду знать теперь. Извиняюсь за беспокойство. Тему можно удалять, ибо флейм пошел.
 

Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double

Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.

Может хоть в MQL разработчики реализовали бы такую фичу?

 
Mangalor:

Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double

Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.

Может хоть в MQL разработчики реализовали бы такую фичу?


Категорически нет. Арифметика с плавающими числами на несколько порядков(!) медленнее целочисленной арифметики.
 
Mangalor:

Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double

Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.

Может хоть в MQL разработчики реализовали бы такую фичу?

Если ты делить собираешься то лучше не использовать int. Ибо деление само по себе редко в результат выдаст тоже int. А тут дело имеешь с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные int вообще практически, если только надо какой нить признак который имеет не два значения)

 
stringo:
Mangalor:

Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double

Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.

Может хоть в MQL разработчики реализовали бы такую фичу?


Категорически нет. Арифметика с плавающими числами на несколько порядков(!) медленнее целочисленной арифметики.

Ну так что мешает завести ещё одну операцию -- целочисленное деление? Например, a div b

Дело в том, что в экспертах в основном производятся математические расчёты, где ошибки в арифметике страшнее, чем проблемы с производительностью. Оптимизацией можно заняться и потом, -- главное, чтобы считало правильно.

 
Тут еще дело в том, что MQL делался по подобию С. Если сделать другое приведение типов, то у многих, кто программирует на С, могут возникнуть такие же проблемы как у меня сегодня. :) С непривычки. Поэтому имеющаяся схема приведения типов теперь мне кажется вполне логичной.
 
scorpionk писал (а):

Если ты делить собираешься то лучше не использовать int. Ибо деление само по себе редко в результат выдаст тоже int. А тут дело имеешь с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные int вообще практически, если только надо какой нить признак который имеет не два значения)



У меня прокол получился при таком выражении (примерно):

double d=MathRand()/32767*Int_;

MathRand() имеет выходной параметр int, и этот параметр объявил не я :). Поэтому я и не заметил по-началу этого прикола. Пришлось сделать так:

double d=MathRand();
d=d/32767*Int_;
 
scorpionk:
Mangalor:

Кстати, да, на мой взгляд, логичнее было бы в C++ иметь int / int = double

Не раз накалывался в больших математических выражениях. Приходится кроме отладки основного кода заниматься ещё и отладкой правильности приведения типов. А ведь можно и запросто не заметить.

Может хоть в MQL разработчики реализовали бы такую фичу?

Если ты делить собираешься то лучше не использовать int. Ибо деление само по себе редко в результат выдаст тоже int. А тут дело имеешь с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные int вообще практически, если только надо какой нить признак который имеет не два значения)

Проблема не том, что лучше, а что хуже и что делать, чтобы не допускать ошибок. Просто любой нормальный человек при делении целого числа на целое в результате получает дробное, кроме загадочного C++ (и как следствие MQL), в который данный казус попал из ассемблера и по соображениям производительности. Такое трактование деления чревато ошибками в больших математических выражениях, что является критичным для MQL.

 
Player_2:
scorpionk писал (а):

Если ты делить собираешься то лучше не использовать int. Ибо деление само по себе редко в результат выдаст тоже int. А тут дело имеешь с ценами, о каком int`е может идти речь вообще. Я не объявлял переменные int вообще практически, если только надо какой нить признак который имеет не два значения)



У меня прокол получился при таком выражении (примерно):

double d=MathRand()/32767*Int_;

MathRand() имеет выходной параметр int, и этот параметр объявил не я :). Поэтому я и не заметил по-началу этого прикола. Пришлось сделать так:

double d=MathRand();
d=d/32767*Int_;

Во-во, а иногда приходится конкретно париться и вместо простой на вид математической формулы заводить кучу дополнительных double переменных и разбивать, казалось бы, лаконичную формулу на несколько частей. А всё из-за недружественности языка.