|
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
|
||||||
Сравнение чисел с плавающей точкой05.09.2014, 13:08. Показов 14123. Ответов 33
Метки нет (Все метки)
Известно, что числа с плавающей точкой нельзя сравнивать с помощью ==. Однако, нет ли исключения из этого правила? Дело вот в чём. Если мы вводим значение такой переменной (которое заведомо не будет за пределами точности), а потом сравниваем с некоторыми такими же "чистыми" значениями с помощью ==, это будет адекватно? Можно ли так делать, и если нельзя, то почему?
Пример:
1
|
||||||
| 05.09.2014, 13:08 | |
|
Ответы с готовыми решениями:
33
Написать защиту от ввода чисел с плавающей точкой, отрицательных чисел и символов Умножения чисел с плавающей точкой Массив чисел с плавающей точкой |
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 05.09.2014, 16:03 | |
|
0
|
|
|
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
|
||||
| 05.09.2014, 16:35 [ТС] | ||||
Добавлено через 9 минут Таки получается, нельзя ?
0
|
||||
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|||||||||||
| 05.09.2014, 17:53 | |||||||||||
|
Всё верно, нельзя числа с плавающей точкой тупым == (без перегрузок) сравнивать как инты.
В сяшном стиле это делается через FLT_EPSILON, DBL_EPSILON или LDBL_EPSILON из float.h:
1
|
|||||||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 05.09.2014, 18:03 | ||
|
1
|
||
| 05.09.2014, 22:09 | ||
|
Но я бы ТС очень не рекомендовал строить логику программы, опираясь на эти предположения.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 05.09.2014, 22:29 | ||
|
1
|
||
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|
| 05.09.2014, 22:33 | |
|
Кстати, ещё в IEEE 754 операции над вещественными не ассоциативны (для битоперекладчиков-параноиков).
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||||
| 05.09.2014, 22:39 | ||||||
|
_Ivana, вот к примеру, запусти такую программу:
0
|
||||||
| 05.09.2014, 22:48 | |
|
Да я не про вычисления, это все понятно. Я про единообразность перевода во флоаты, на что хочет опереться автор.
Не по теме: ЗЫ битоперекладчики-параноики заспорили в соседнем разделе по С, высказались бы там что-ли :)
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 05.09.2014, 23:01 | ||
|
В принципе да, здесь не может быть строгой гарантии. Это implementation defined.
0
|
||
|
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
|
||||||
| 11.03.2017, 00:22 | ||||||
|
я так сравнивал:
0
|
||||||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 11.03.2017, 09:18 | |
|
ИМХО, самый простой ответ на изначальный вопрос топикстартера (из практики):
1. целые значения плавающих типов можешь сравнивать как угодно. 2. Дробные значения можешь сравнивать на равенство-неравенство - только степени двойки (1/2, 1/4...) 3. Дробные значения - не степени двойки на равенство лучше не сравнивать, если значение получено в результате вычислений. Ты, конечно, можешь написать сравнение "==", но это как раз тот наиболее часто встречающийся случай, когда НЕ РЕКОМЕНДУЕТСЯ. Ибо все дробные числа - не степени двойки, представлены в памяти НЕ ТОЧНО.
0
|
|
| 11.03.2017, 09:18 | |
|
Представление чисел с плавающей точкой Форматирование чисел с плавающей точкой Калькулятор чисел с плавающей точкой Проблема сравнения чисел с плавающей точкой
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
BitTorrent (версия 7.11 English) и Меню Настройки
russiannick 15.11.2026
Пункты, отвечающие за отключение обновлений в BitTorrent версии 7. 11 (английской)
Options
Preferences
General
Language
|
Транслитерация текста с кириллицы на латиницу (вариант №4)
Maks 15.11.2026
Что-то я перемудрил с предыдущими версиями, в этот раз сделал всё проще, обратившись к функции "СтрокаЛатиницей" из типового общего модуля "СтроковыеФункцииКлиент".
В данной функции нет апострофов,. . .
|
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы.
Карта этого меню приложена ниже.
Нужный пункт выделен красным.
Сервис
Настройки
Поведение
|
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки.
Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён".
Изменено отображение буквы Й.
Добавлена. . .
|
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|