Неясные приоритеты

 
Столкнулся с вот такой странной проблемой в простых арифметических операциях:

1-10/100  - результат 1. Не помогает даже NormalizeDouble(1-10/100, 10)

1-0.1 - результат 0.9

1-(10/100) - результат 1.

ПОЧЕМУ?????

Дошло до абсурда:
   double a=NormalizeDouble(10/100, 10);
   double b=1-a;
   Print(a, "     ", b);
Результат:  0    1. То есть при делении 10 на 100 получаем 0!!!
 

Попробуйте 1.0-10.0/100

 
Figar0:

Попробуйте 1.0-10.0/100



Да, так выходит. Но что делать, если мне необходимо провести такое вычисление:
extern int A=10;
extern int B=20;
extern int C=30;
 
double d = OrderLots()*(C/100)*(1-A/100)*(1-B/100)
 
Scriptong:
Да, так выходит. Но что делать, если мне необходимо провести такое вычисление:
extern double A=10.0;
extern double B=20.0;
extern double C=30.0;
 
double d = OrderLots()*(C/100.0)*(1-A/100.0)*(1-B/100.0)
 
Да, спасибо. Посмотрел ваши ссылки. Проблему понял. Но все же во всех других языках результат деления двух даже целочисленных значений приводит к результату с плавающей точкой,  даже если это 100/10. Все равно будет 10.0000 и никакими судьбами напрямую без преобразования не присвоить такой результат целочисленной переменной.
Очень сбивает с толку такое положение вещей, заставляя каждый раз наступать на одни и те же грабли.
 
Scriptong:
Да, спасибо. Посмотрел ваши ссылки. Проблему понял. Но все же во всех других языках результат деления двух даже целочисленных значений приводит к результату с плавающей точкой, даже если это 100/10.
Плохо смотрели...
 
Математика. 1-й класс 2-я четверть. Неуд для MQL4:

Renat 26.08.05 14:06

Вот так вот и бывает, когда кто-то приходит в реальный мир программирования.

Возьмем стандартный С и запустим программу:

void main(void)
{
//----
printf("Result integer %d\n",70/100);
printf("Result double %lf\n",70/100.0);
//----
}


на выходе:
Result integer 0
Result double 0.700000

Что и требовалось доказать. И так практически во всех языках уровня С/C++.

Я бы все-таки рекомендовал не бросаться с шашкой на профессиональных программистов, пытаясь обвинить их в некомпетентности. Это даже не смешно.

 
komposter:
Математика. 1-й класс 2-я четверть. Неуд для MQL4:

Renat 26.08.05 14:06



Вот так вот и бывает, когда кто-то приходит в реальный мир программирования.


Возьмем стандартный С и запустим программу:

void main(void)
{
//----
printf("Result integer %d\n",70/100);
printf("Result double %lf\n",70/100.0);
//----
}





на выходе:

Result integer 0

Result double 0.700000


Что и требовалось доказать. И так практически во всех языках уровня С/C++.


Я бы все-таки рекомендовал не бросаться с шашкой на профессиональных
программистов, пытаясь обвинить их в некомпетентности. Это даже не
смешно.








Неужели мы еще и в этой теме полемику разведем? :))))
 
Scriptong:
Неужели мы еще и в этой теме полемику разведем? :))))
Надеюсь, нет ;)
ps: plz, не надо полностью цитировать такие большие посты