![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Варианты решения задачи сравнения вещественных чисел. [D7, WinXP]
Zheksik © (2008-01-08 11:03:00)Прочитал статью посвящённую этой теме и пришёл к выводу, что должен быть не один вариант решения этой задачи. Мой вариант - это умножение до получения целого числа. Какие ещё есть варианты?
sniknik (2008-01-08 16:23:00) [21]> Если равны и экспоненты, то бинго! Два числа абсолютно равны.
для абсолютного равенства не надо сложностей, просто сравнение... главное сравнивать числа в однотипных переменных. (сингл-сингл) т.к. у одинаковых чисел и погрешность будет одинаковая.
Dib@zol (2008-01-08 16:22:00) [22]> Не поможет.
Почему??? Ах да, каюсь, про знаковый разряд забыл. Пазор на маю седую голову %)))
Германн (2008-01-08 16:21:00) [23]
> Dib@zol © (08.01.08 16:18) [24]
>
> Вощем это, надеюсь, поможет.
>
Не поможет.
Zheksik (2008-01-08 16:20:00) [24][23]
А кто это говорит??? ааа, тот кто мнит себя профессионалом...
Тут я с тобой полностью согласен... просто говорят, что с нкоторыми категориями граждан лучше не спорить...
sniknik (2008-01-08 16:19:00) [25]> правильный вариант решения этой задачи.
это, то что ты озвучил, не задача, задача это то что ты делаешь, цель ради которой тебе понадобилось сравнение вещественных чисел (или чтото заменяющее).
поэтому вам и говорят постоянно - начинайте вопрос с того "что вы делаете", а не "как вы делаете". как это уже после, в пояснении, типа "делаю таким способом...", чтобы можно было решить правильный ли путь решения выбран.
> В моём случае точность определяется сотыми долями числа, поэтому остаток роли не играет...
в твоем не важно? работает? так какого тебе еще надо?
> что он профессионал???
все кто получают деньги за программирование проффесионал. по определению. ты вот тоже, если зарплату тебе за это платят.... хреновый правда, но проффессионал.
Германн (2008-01-08 16:18:00) [26]
> Кстати именно из-за неуниверсальности этого метода хочу
> узнать более правильный вариант решения этой задачи.
Самый правильный - плюнуть и растереть. К тому это ещё и самый универсальный способ решения задач.
Dib@zol (2008-01-08 16:18:00) [27]Вощем это, надеюсь, поможет.
Как известно, вещественное число (для простоты возьмём тип Single) хранится в памяти так:
1 23 8
+---+-------------------+-------+
| B | M | E |
+---+-------------------+-------+
Где B - знаковый разряд (1 бит), M - мантиса числа (23 бита), E - его порядок (8 бит).
1+23+8 = 32. => Влезет в четыре байта.
Например, возьмём число +1.25*10^5. Плюс - это ноль в знаковом разряде (если минус, то 1). 1.25 - это собсно мантисса. 5 - экспонента.
Ну тык вот. Предлагаю сравнивать отдельно мантиссы и экспоненты. Если мантиссы равны до определённого знака, то сравниваем экспоненты. Если изначально мантиссы не равны, то выходим сразу. Если равны и экспоненты, то бинго! Два числа абсолютно равны.
Как определять что больше или меньше, напишу попожже, т.к. сам пока не продумал до конца алгоритм =)
Leonid Troyanovsky (2008-01-08 16:15:00) [28]
> Zheksik © (08.01.08 16:09) [22]
> кто следующий воспользуется ситуациеё
Тебя ж оно никак не спасет.
--
Regards, LVT.
Zheksik (2008-01-08 16:09:00) [29][19]
хо-хо-хо :)))
кто следующий воспользуется ситуациеё и ничем не доказав(даже наводкой, я уж не говорю про крывые наводки) скажет, что он профессионал???
Правильный_Вася (2008-01-08 16:08:00) [30]
> 0.25 <> 0.250000001
см. Правильный_Вася (08.01.08 13:34) [5]
Anatoly Podgoretsky (2008-01-08 16:08:00) [31]> Palladin (08.01.2008 13:57:08) [8]
Сам ты ошибся, и в школе видимо пропустил дроби.
Palladin (2008-01-08 16:04:00) [32]Это мы, проффесионалы. :)))
Zheksik (2008-01-08 16:02:00) [33]
> [17]
Кто мы???
Leonid Troyanovsky (2008-01-08 16:01:00) [34]
> Zheksik © (08.01.08 15:45) [14]
> что по этому поводу думают профессионалы.
Мы в восхищении.
--
Regards, LVT.
Zheksik (2008-01-08 16:00:00) [35][15]
> А с какого потолка выбрано именно 100?
В моём случаеточность определяется сотыми долями числа, поэтому остаток роли не играет...
Кстати именно из-за неуниверсальности этого метода хочу узнать более правильный вариант решения этой задачи.
Германн (2008-01-08 15:49:00) [36]
> Как по мне, то проще всего в этой ситуации умножать и то
> и другое число на 100
А с какого потолка выбрано именно 100? Когда ответишь на этот вопрос, тогда и найдешь правильный вариант.
Zheksik (2008-01-08 15:45:00) [37]ох вы тут в арифметику ударились... скоро олимпиада что ли???
проблема в том, что имея цикл, закрывающийся как только некая вещественная переменная станет равна другой вещественной переменной, этого же типа, нет гарантии, что он закроется т.к0.25 <> 0.250000001, предположим...
Как по мне, то проще всего в этой ситуации умножать и то и другое число на 100 и отбрасывая остаток сравнивать эти числа, но кажется это не совсем правильный вариант, вот я и хотел поинтересоваться, что по этому поводу думают профессионалы...
Zheksik (2008-01-08 15:38:00) [38]
> Это не в этой галактике.
Теперь вижу )))
Можно съехать на тонкость мысли или галактический обстрактный код.
Malina (2008-01-08 14:24:00) [39]
> Анатоль обшибся :)
а-а-а теперь все точки над и расставлены четко )
Дуболом (2008-01-08 14:07:00) [40]> Мой вариант - это умножение до получения целого числа.
Умножение чего? Умножение на что?
> Malina (08.01.08 13:50) [7]
Тут с подвохом трудно. Но вот тут в полный рост:
x := random;
while 2=2 do begin
x := frac(2*x);
writeln(x);
end;
x := random;
while 3=3 do begin
x := frac(3*x);
writeln(x);
end;