?

Log in

No account? Create an account
  Journal   Friends   Calendar   User Info   Memories
 

Электронный миссионер

8th October, 2009. 4:49 pm. Изучая си...

Столкнулся с забавным затыком, нужно было исключить срабатывания при переменной xtra равной 1, 5, 25 и 125. Я записал:

...
if ((xtra != 1) || (xtra != 5) || (xtra != 25) || (xtra != 125)) {
...}


В результате срабатывало всегда! Просто взорвал себе мозг, оказывается надо было записать

...
if ((xtra != 1) && (xtra != 5) && (xtra != 25) && (xtra != 125)) {
...}


Банально, но был долгий затык. Народ, скажите, как мне сравнивать значения типа float? Задача определить чётко, после вычислений - равно ли оно заданному значению.

Округляю число так:

		ErValue *= 100000;
		ErValue = ceil(ErValue);
		ErValue /= 100000;


При каждом запуске программы младшие биты разные, хотя вычисление идёт со строго вбитыми в программу константами (т.е. метод неизменен).

UPD Сей дурацкий на первый взгляд вопрос, возник при разборе полётов одной программы. Она выводит число с кучей знаков после запятой. Когда я компилятором вывожу число с 7 знаками после запятой, то выходит другое число, когда я округляю алгоритмом приведёным выше (5 знаков после запятой), то близкое к округленю компилятором, но очень отличающееся от исходного. Вот например:

Read 18 Notes -Make Notes

Back A Day - Forward A Day