|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.10.2009, 17:02 | #1 |
Регистрация: 17.10.2009
Сообщений: 4
|
Машинное эпсилон
Понятие "Машинное эпсилон" (МЭ) вводится для оценки относительной точности представления чисел с плавающей точкой в компьютере. Вот наиболее распространенное определение МЭ (сравните, например, с определением в "Википедии"):
"Машинным эпсилоном называется наименьшее положительное число eps такое, что 1 + eps > 1 (знаком + обозначено машинное сложение)." Обычно для машин, использующих двоичное представление чисел, МЭ ищется среди чисел вида 1/2^n , и этот способ поиска дает "правильную" (объяснение ниже) величину МЭ. Так, для чисел "float", занимающих 4 байта памяти, eps = 2^-23 = 1.2e-7. Но вышеприведенное определение МЭ не является корректным. Под это определение подходят числа х такие, что eps/2 < x < eps, которые не являются "правильными" МЭ. Возьмем, например, число non_eps = 7e-8. 1 + non_eps > 1 non_eps по величине почти вдвое меньше eps, однако после сложения с единицей увеличивает ее значение ровно на eps, то есть (1 + non_eps) - 1 = eps Это происходит, судя по всему, в результате округления вверх перед записью в ячейку памяти полученного на сумматоре значения 1 + non_eps. Обычно в формулах используется величина "1+МЭ". Например, в "Википедии" написано: "Грубо говоря, числа a и b, соотносящиеся так, что 1 < a/b < 1+eps машина не различает." Таким образом, в машине должна быть представлена величина 1+МЭ. Число 1+non_eps в машине не представляется, а представляется 1+eps, которое отличается от числа "1" на единицу самого младшего разряда мантиссы и является ближайшим сверху к числу "1" машинным числом. Поэтому я считаю, что правильным является другое определение МЭ, которое исключает "фантомы" вроде non_eps, но, к сожалению, встречается гораздо реже: "Машинное эпсилон представляет собой расстояние между единицей и ближайшим справа машинным числом." (http://www.phys.spbu.ru/content/File...turePMF_09.pdf) Поиск МЭ среди чисел вида 1/2^n для машин, использующих двоичное представление чисел, исключает фантомы и является единственно правильным. Хотелось бы обсудить корректность определений понятия "Машинное эпсилон". Последний раз редактировалось Лёва_В; 17.10.2009 в 18:00. |
17.10.2009, 17:05 | #2 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
Ээээээ... А что мы должны обсудить и оспаривать?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
17.10.2009, 17:14 | #3 |
Регистрация: 17.10.2009
Сообщений: 4
|
- Корректное определение понятия "Машинное эпсилон".
Ну, что, "профессионалы", можете промычать что-нибудь вразумительное по поводу двух разных определений машинного эпсилон? Мой приятель (мы оба - математики, мех-мат МГУ) считает правильным первое определение, а поиск МЭ среди чисел вида 1/2^n неправильным и гордится найденным им "правильным" значением МЭ, равным для чисел "float" 2^-24+2^-47. Наш спор и заставил меня написать заметку выше. Рассудите же нас! Последний раз редактировалось Stilet; 02.11.2009 в 08:10. |
02.11.2009, 04:32 | #4 | |
Новичок
Джуниор
Регистрация: 26.08.2008
Сообщений: 1,010
|
Цитата:
Есть такое понятие, как точность вычислений. Когда необходимы сверх-точные вычисления, без машинного округления, используют строчное(бинарное, но не ограниченной длины) представление данных и особые алгоритмы операций. Например, так ищут число Pi.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими. |
|
02.11.2009, 22:35 | #5 |
Регистрация: 17.10.2009
Сообщений: 4
|
Меня интересуют не сверхточные вычисления, а правильное определение понятия "Машинное эпсилон".
Последний раз редактировалось Лёва_В; 02.11.2009 в 23:05. |
02.11.2009, 23:52 | #6 |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
Эм... А оно нам надо? Вот если честно-то разобраться...
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
03.11.2009, 00:08 | #7 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
По-моему, оба определения идентичны.
E-Mail: arigato.freelance@gmail.com
|
03.11.2009, 02:11 | #8 |
Регистрация: 17.10.2009
Сообщений: 4
|
Нет. Второе определение чётко дает величину машинного эпсилон для 4-байтовых чисел: 2^-23. Первому определению удовлетворяет число, почти вдвое меньшее: 2^-24+2^-47, но это число при сложении с единицей увеличивает ее на 2^-23.
Поэтому я считаю первое определение некорректным, хотя оно встречается "на каждом шагу", а второе, правильное, я нашел в Интернете с огромным трудом. Последний раз редактировалось Лёва_В; 03.11.2009 в 02:17. |
03.11.2009, 13:37 | #9 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Программа из Википедии даёт примерно 6e-8.
В float.h дано число FLT_EPSILON, примерно равное 1.2e-7 Если мне понадобится работать с такими числами, я буду использовать double. Думаю, разработчиков процессоров и компиляторов такие мелочи тоже вряд ли интересуют. А на переливание из пустого в порожнее (почти буквально) существуют мехматовцы. :) P. S. Напишите на пару со своим приятелем диссертацию на эту захватывающую тему. :) Последний раз редактировалось ds.Dante; 03.11.2009 в 13:41. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Машинное масло или Подсолнечное? | Stilet | Свободное общение | 17 | 22.09.2009 23:20 |