АвторСообщение



Пост N: 5
Зарегистрирован: 04.11.11
ссылка на сообщение  Отправлено: 09.11.11 06:20. Заголовок: Вопрос про сравнение двух переменных типа double?


Есть такая строчка кода:

 цитата:
if(zv3 == NormalizeDouble((Low-(down+4)*Point),Digits))



Причём:

 цитата:
Alert: zv3 = 1.3768 NormalizeDouble((Low-(down+4)*Point),Digits) = 1.3768



Вопрос:
Почему оператор if даёт FALSE?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


постоянный участник


Пост N: 229
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 09.11.11 11:34. Заголовок: genbachae пишет: По..


genbachae пишет:

 цитата:
Почему оператор if даёт FALSE?


Функции Alert и Print производят округление всех значений типа double до 4-х знаков после запятой. Поэтому вы не видите истинное значение zv3. Чтобы увидеть все значащие цифры выводите значение zv3 при помощи такого оператора:


 цитата:
Alert("zv3 = ", DoubleToStr(zv3, 16));



Наилучший способ сравнения двух переменных типа double - сравнение их разности с некоторой минимальной величиной. Например, если вы сравниваете две цены, то достаточно сравнить их разницу с величиной Point:


 цитата:

double a = ....;
double b = ...;
if (MathAbs(a - b) >= Point)
{
// значения не равны
}
else
{
// значения равны
}



Спасибо: 0 
ПрофильЦитата Ответить
Автор




Пост N: 920
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 09.11.11 11:56. Заголовок: genbachae пишет: По..


genbachae пишет:

 цитата:
Почему оператор if даёт FALSE?

Видимо, потому, что значение zv3 не нормализовано. Если нормализовать оба сравниваемые значения, то if() будет возвращать true.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет