2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Как найти машинный эпсилон?
Сообщение22.09.2020, 16:10 


01/03/20
46
Машинный эпсилон --- это наименьшее число eps, такое что eps+1=1.
Почему для тестирования выбирают именно число 1?
Почему при нахождении машинного эпсилона в цикле тестируемое число каждый раз делят на 2?
Код:
float eps = 1;
while (eps+1 != 1) eps = eps/2;
Вдруг эпсилон находится где-то между между 1/2^n и 1/2^(n+1)? Есть ла за этим какое-то обоснование? Быть может, погрешность машинного округления зависит только от порядка числа и от положения первого ненулевого бита в его мантиссе? Или просто эпсилон находится приближенно среди чисел вида 1/2^n?

 Профиль  
                  
 
 Re: Как найти машинный эпсилон?
Сообщение22.09.2020, 16:45 
Заслуженный участник


18/01/15
3237
Рекомендуется читать книгу
M.L.Overton, Numerical computing with IEEE floating point arithmetics.
Там есть все ответы. (А сама книга есть в либгене) Книга исключительно понятная.

 Профиль  
                  
 
 Re: Как найти машинный эпсилон?
Сообщение22.09.2020, 17:53 


01/03/20
46
vpb в сообщении #1484164 писал(а):
Рекомендуется читать книгу
M.L.Overton, Numerical computing with IEEE floating point arithmetics.
Там есть все ответы. (А сама книга есть в либгене) Книга исключительно понятная.
Спасибо. Постараюсь со временем прочитать. К сожалению, английским плохо владею. Может, все-таки кто-нибудь в двух словах ответит.

 Профиль  
                  
 
 Re: Как найти машинный эпсилон?
Сообщение23.09.2020, 02:23 
Заслуженный участник


12/07/07
4525
IvanX в сообщении #1484155 писал(а):
Машинный эпсилон --- это наименьшее число eps, такое что eps+1=1.
Это заведомо неправильное определение. Нужно хотя бы заменить «наименьшее» на «наибольшее».
[Слово «наименьшее» будет фигурировать в таком определении машинного $\varepsilon$:
Машинное $\varepsilon$ — это такое минимальное положительное число, которое при прибавлении к 1 даёт следующее за 1 число, т.е. наименьшее большее 1.]

[Дальше для случая нормализованных чисел.]

Если машинное $\varepsilon$ определяется как максимальная предельная относительная погрешность представления числа, то оно равно $2^{-p}/2$, где $p$ — число отводимых для дробной части числа бит (т.е. без целой единицы). Для binary32 (Single) $p$ равно 23 ($\varepsilon$ приближенно равно $5.960464478\cdot 10^{-8}$), для binary64 (Double) $p$ равно 52 ($\varepsilon$ приближенно равно $1.110223025 \cdot 10^{-16}$). В этом определении предполагается, что при округлении погрешность не более половины младшего бита.

Если машинное $\varepsilon$ определяется как разность между 1 и ближайшему к нему числу большему 1, то оно равно $2^{-p}$. Такое определение eps используется в Scilab [см «epsilon (floating-point relative accuracy)»], Octave, Matlab (можно проверить, вызвав соответствующую функцию eps).

Вроде так.

 Профиль  
                  
 
 Re: Как найти машинный эпсилон?
Сообщение23.09.2020, 13:05 
Заслуженный участник


20/08/14
11861
Россия, Москва
Если в двух словах ...
IvanX в сообщении #1484155 писал(а):
Почему для тестирования выбирают именно число 1?
Потому что числа хранятся в нормализованном виде, с целой частью равной $1$.
IvanX в сообщении #1484155 писал(а):
Почему при нахождении машинного эпсилона в цикле тестируемое число каждый раз делят на 2?
Потому что числа хранятся в двоичном коде (системе счисления с основанием 2).
IvanX в сообщении #1484155 писал(а):
Вдруг эпсилон находится где-то между между 1/2^n и 1/2^(n+1)? Есть ла за этим какое-то обоснование?
Это зависит от определения что именно считать машинным $\varepsilon$, как выше правильно объяснили.
Ну и произвольным он быть не может, в зависимости от определения число всегда будет одно точно заданное.

Добавлю что для формата long double (80 битов FPU) $p$ (число битов дробной части мантиссы) равно 63.

Подробнее можно посмотреть хотя бы в вики: Machine_epsilon (на русском убого, тут же понятно и без глубокого знания английского, да и онлайн перевод пока не отменили). Кстати примечание под таблицей про Scilab тут ошибочное.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group