осторожно - результат не всегда таков каким вы его ожидаете ... :)

 

Здравствуйте!

этот небольшой скрипт:

//###############################################

int start()
{
double temp = 1.39963 - 1.39913;
int pow = MathPow(10,5);
int result = temp * pow ;

Alert( DoubleToStr(temp,5), " * ", pow, " = ", result );
return(0);
}

//###############################################

выдает ошибочный результат ( 49 вместо 50 )

если поменять тип переменной "result" на "double", то ошибки не будет

в чем тут проблема?

 
инт отбрасывает дробную часть. у вас в стеке получается лежит 49,9999999999 отсюда и 49 =) нормализуйте числа
 
GarF1eld писал(а) >>
инт отбрасывает дробную часть. у вас в стеке получается лежит 49,9999999999 отсюда и 49 =) нормализуйте числа

спасибо за ответ. нормализовал "temp" и ... заработало

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

ведь не всегда знаешь где нормализовать а где нет. раньше думал, что только в вызове торговых функций ...

 
vlad_90 писал(а) >>

спасибо за ответ. нормализовал "temp" и ... заработало

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

ведь не всегда знаешь где нормализовать а где нет. раньше думал, что только в вызове торговых функций ...

счтайте все в даблах. Пока не поймете где можно для быстроты и в интах считать. Будите считать все в даблах все будет точно всега.

Причина обращения: