Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ээээээ... А что мы должны обсудить и оспаривать?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 17.10.2009, 17:14   #3
Лёва_В
 
Регистрация: 17.10.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Ээээээ... А что мы должны обсудить и оспаривать?
- Корректное определение понятия "Машинное эпсилон".

Ну, что, "профессионалы", можете промычать что-нибудь вразумительное по поводу двух разных определений машинного эпсилон?

Мой приятель (мы оба - математики, мех-мат МГУ) считает правильным первое определение, а поиск МЭ среди чисел вида 1/2^n неправильным и гордится найденным им "правильным" значением МЭ, равным для чисел "float" 2^-24+2^-47.

Наш спор и заставил меня написать заметку выше. Рассудите же нас!

Последний раз редактировалось Stilet; 02.11.2009 в 08:10.
Лёва_В вне форума Ответить с цитированием
Старый 02.11.2009, 04:32   #4
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Цитата:
Сообщение от Лёва_В Посмотреть сообщение
Ну, что, "профессионалы", можете промычать что-нибудь вразумительное по поводу двух разных определений машинного эпсилон?

Мой приятель (мы оба - математики, мех-мат МГУ) считает правильным первое определение, а поиск МЭ среди чисел вида 1/2^n неправильным и гордится найденным им "правильным" значением МЭ, равным для чисел "float" 2^-24+2^-47.

Наш спор и заставил меня написать заметку выше. Рассудите же нас!
Мы по вашему инженеры-физики? ах нет... дак не пойти бы вам товарищ в лес?)

Есть такое понятие, как точность вычислений.
Когда необходимы сверх-точные вычисления, без машинного округления, используют строчное(бинарное, но не ограниченной длины) представление данных и особые алгоритмы операций.
Например, так ищут число Pi.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 02.11.2009, 22:35   #5
Лёва_В
 
Регистрация: 17.10.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от alexinspir Посмотреть сообщение
Когда необходимы сверх-точные вычисления, без машинного округления, используют строчное представление данных и особые алгоритмы операций.
Меня интересуют не сверхточные вычисления, а правильное определение понятия "Машинное эпсилон".

Последний раз редактировалось Лёва_В; 02.11.2009 в 23:05.
Лёва_В вне форума Ответить с цитированием
Старый 02.11.2009, 23:52   #6
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Цитата:
Сообщение от Лёва_В Посмотреть сообщение
Ну, что, "профессионалы", можете промычать что-нибудь вразумительное по поводу двух разных определений машинного эпсилон?
Эм... А оно нам надо? Вот если честно-то разобраться...
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 03.11.2009, 00:08   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

По-моему, оба определения идентичны.
Arigato вне форума Ответить с цитированием
Старый 03.11.2009, 02:11   #8
Лёва_В
 
Регистрация: 17.10.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
По-моему, оба определения идентичны.
Нет. Второе определение чётко дает величину машинного эпсилон для 4-байтовых чисел: 2^-23. Первому определению удовлетворяет число, почти вдвое меньшее: 2^-24+2^-47, но это число при сложении с единицей увеличивает ее на 2^-23.

Поэтому я считаю первое определение некорректным, хотя оно встречается "на каждом шагу", а второе, правильное, я нашел в Интернете с огромным трудом.

Последний раз редактировалось Лёва_В; 03.11.2009 в 02:17.
Лёва_В вне форума Ответить с цитированием
Старый 03.11.2009, 13:37   #9
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Программа из Википедии даёт примерно 6e-8.

В float.h дано число FLT_EPSILON, примерно равное 1.2e-7

Если мне понадобится работать с такими числами, я буду использовать double. Думаю, разработчиков процессоров и компиляторов такие мелочи тоже вряд ли интересуют. А на переливание из пустого в порожнее (почти буквально) существуют мехматовцы. :)

P. S. Напишите на пару со своим приятелем диссертацию на эту захватывающую тему. :)

Последний раз редактировалось ds.Dante; 03.11.2009 в 13:41.
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Машинное масло или Подсолнечное? Stilet Свободное общение 17 22.09.2009 23:20