![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Как сделать САБЖ?
ЗЫ Надо бы это в ФАК, а по поиску не нашёл ничего... -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
| Alastis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: 4 Всего: 10 |
-------------------- Прости, что я говорю, когда ты меня перебиваешь. |
|||
|
||||
| vadims |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 8.6.2005 Репутация: 2 Всего: 17 |
Открыта новая юмористическя ветка ? Когда презентация с фуршетом ??? -------------------- Cpu not found ! Press any key for software emulation. |
|||
|
||||
| gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Alastis
Там сравнение идёт на асме, а мне надо простыми способами. Раньше была такая тема, но базу подчистили... vadims Юморист, а ты не в курсе, что ты не сможешь сравнить два float числа обычным "==" ? -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
| Alastis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: 4 Всего: 10 |
gepard
может тогда
просто и сердито сравниваешь до определенной точности -------------------- Прости, что я говорю, когда ты меня перебиваешь. |
|||
|
||||
| gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Alastis
Есть три варианта: оба числа < 0, оба числа > 0 и они с разными знаками. По твоим словам:
-------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Вот пример удобного шаблона на C++, может пригодится.
Использование:
Это код для MSVC.NET. Раньше, в MSVC 6, допустимы были числовые параметры-шаблона типа double, и определение было чуть попроще... Шаблон работает для любых типов, для которых определены арифметичесие операции (хотя бы часть). -------------------- ... |
||||
|
|||||
| gepard |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Earnest
Смотри мой пост предыдущий -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Что-то я не пойму, в чем проблема.
Если числа с разными знаками, но в пределах заданной точности, например +eps/2 и -eps/2, то они равны. Если нет - то нет. Или по-вашему, (0.5 == - 0.5) должно быть true ? -------------------- ... |
|||
|
||||
| gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Earnest
Проблема всё в том же - в сравнении двух чисел... -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
| Adil' |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
gepard, что-то ты перемудрил: fabs(a-b)<delta - вполне нормальный способ сравнения. -0.5 не будет, и не должно равняться +0.5, если конечно delt'у единицей не делать.
-------------------- Удачи |
|||
|
||||
| vadims |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 8.6.2005 Репутация: 2 Всего: 17 |
gepard
Между прочим я действительно думал, что шутка, а то, что операции с плавающей и целочисленной арифметикой - не одно и тоже - поверь мне проверил на себе не один раз И все-таки как и Earnest не пойму, что именно в сравнении float тебя напрягает. Пример что ли приведи -------------------- Cpu not found ! Press any key for software emulation. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
тогда предложу такой вариант:
пишем функцию, которая выполняет 4 _макро-действия_: 1 -- если два чила меньше нуля -- меняем им знак и сравниваем разницу с точностью 2 -- если первое меньше 0, а второе больше -- какое меньше -- известно 3 -- если второе меньше 0, а первое больше -- какое меньше -- изветсно 4 -- сравниваем разницу с точностью -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Adil' |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
_hunter, это что, продолжение шутки?
-------------------- Удачи |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
продолжение не продолжение, но раз человек просит -- чего бы не помогти...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: 4 Всего: 6 |
слушайте а как вам такой способ:
т.к float - 6 байтов, то первые 2 байта наверное идут под ехпоненту, остальные 4 под мантиссу. перевести число в 2-ичный еквивалент, сравнить сначала експоненты числа, если они равны, то сравнить их мантиссы посредством двоичной операции И. При случае когда числа равны, оба числа останутся без изменений но, в противном случае можно смотреть порядок следования байтов и смотреть какое из чисел всё же больше. Это только теоретическое предположение. -------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
в смысле с конца по битикам?? и чем это лучше, чем просто вычитать и сравнивать??
|
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Для определения, что больше, а что - меньше, круче чем вычитанием для общего случая никак не сделаешь. По крайней мере, с банальной математической точки зрения я не вижу альтернативы...
|
|||
|
||||
| B2_Russia |
|
|||
![]() В доску свой :) ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 3.7.2003 Где: Тверь Репутация: нет Всего: 1 |
ваще проблемы нету - вся эта хрень
на первом занянии по ЧМам излагается.. float - маздай!!! юзайте double ! Это сообщение отредактировал(а) B2_Russia - 27.6.2005, 15:25 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
В каком это компиляторе размер float составляет 6 байтов? До сих пор была уверена, что размер float == 4 байта, по крайней мере в VC и в Borland C. Может, я от жизни отстала? -------------------- ... |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Ну насчет float Earnest права, sizeof(float) = 4.
А вот sizeof(double)=8. sizeof(long double)=80([offtop]бах, это случаем не variant из vb?[/offtop]) А вот про 48 битов упоминается в SUS2(SUS3 под рукой нет, но там кажется то же самое есть), например здесь:
Однако хочется сказать,что наши родимые FPU оперируют только 32 битными, 64 битными и 80 битными типами. Если кому-то интересно про float'ы и с чем их едят, то читаем IEEE 754, IEEE 854, RFC 1832... Но там про 48 тоже молчок. Это сообщение отредактировал(а) Mayk - 27.6.2005, 16:58 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Дрон |
|
||||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Ну посмешили, ребята!!!
sizeof(long double) = 10
А разницы? Точность-то всё равно ограничена. gepard
Чем тебе это не нравится? Это сообщение отредактировал(а) Дрон - 27.6.2005, 17:11 -------------------- Да. Именно так. |
||||||
|
|||||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Дрон
Тьфу. Имелись в виду биты -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: 4 Всего: 6 |
Ошибся я чуток, точнее просто забыл, но это не главное. Я просто хотел предложить вам способ сравнение чисел с плавающей точкой и мне интерено ваше мнение.
Добавлено @ 00:04 Кстати при вычитании, не отбрасывается ли точность т.е если сравнивать такие два числа 0.5 и 0.50001 не покажутся ли они одинаковые ? -------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Так в том то и вся соль, чтоб они были одинаковыми. Чтоб не показались одинаковыми надо использовать встроенный bool operator == (float, float). Есть еще такой прикол что одно и то же число можно записать несколькими способами. Например 0,1 = 1 * 10^(-1) = 10 * 10^(-2). (разумеется во флотах комп оперирует 2оичной арифметикой) Это сообщение отредактировал(а) Mayk - 28.6.2005, 09:22 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Adil' |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
Комп всегда хранит плавающие числа в нормализованном виде - если, как в этом примере, в десятичном виде - то как 1 * 10^(-1) -------------------- Удачи |
|||
|
||||
| yaja |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
возможно я неправ, но одно и тоже число(вещественное, типа float, double...) может иметь одно и тоже значение, но разно представление в памяти (разную последовательность бит), а встроенный bool operator == (float, float) сравнивает побитово...
поэтому если нужно сравнить два чила на равенство, то пишут fabs(x - y) < EPSILON эту запись встречал во всех смотренных мною проектах (не просто маленьких программах, а в проектах |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |