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
3110
Рекомендуется читать книгу
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
4456
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
11196
Россия, Москва
Если в двух словах ...
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, Супермодераторы



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

Сейчас этот форум просматривают: Dmitriy40


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

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