dlinyj: (Default)
[personal profile] dlinyj
Столкнулся с забавным затыком, нужно было исключить срабатывания при переменной 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 знаков после запятой), то близкое к округленю компилятором, но очень отличающееся от исходного. Вот например:

Date: 2009-10-09 01:46 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Ну так зачем дело! Дерзай, можно изучить си. Я программирование изучил именно из-за того что мне нравилось мозгом похрустеть! :)

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 06:14 pm
Powered by Dreamwidth Studios