Точность и погрешность

В чем отличие accuracy от precision?
Precision - это по сути дела, разрядность мантиссы. Например, IEEE single-precision numbers (float) хранит в мантиссе 24 бита, и больше туда записать нельзя.
Много это или мало? Грубо можно прикинуть так: 3 бита - это примерно один десятичный разряд, так что мантисса float эквивалентна 8 разрядам десятичной записи. То есть приближение `pi ~~ 3.14159` туда поместится, а `pi ~~ 3,1415926535897932384626433832795` - уже нет.
В мантиссе чисел формата IEEE double-precision (double) - 53 бита, что более чем вдвое больше.

Но разрядности мантиссы самой по себе далеко недостаточно. Например, 3.14 представленное в формате double - это 53-битное приближение к числу `pi`. Только верных разрядов в нем будет далеко не 53. Accuracy - это величина, характеризуемая такой штукой, как погрешность.

Рассмотрим на примере. Пусть у нас есть хорошее приближение к числу пи, взятое из стандартного калькулятора:
`pi ~~ hat pi = 3,1415926535897932384626433832795`
`2^40 * pi = 3454217652357,6368534013395581174`
`|__ 2^40 * pi __| = `floor`(2^40 * pi) = 3454217652357 = 0x3243F6A8885 = `
= 11 0010 0100 0011 1111 0110 1010 1000 1000 1000 0101
Что мы сделали? Мы получили 40-битное приближение к числу пи:
11.0010010000111111011010101000100010000101
В нормализованном в виде это будет `1.10010010000111111011010101000100010000101 * 2^1`
Посмотрим, во что это превратится при сохранениии во float. Отсчитаем 24 бита мантиссы:
1.10010010000111111011010 101000100010
Остаток больше половины младшего разряда, так что добавляется единица:
1.10010010000111111011011 - вот и все что нам удастся сохранить в мантиссе.
Ну, к слову, посмотрим, как выглядит число пи в 16-чном виде в формате float. Отбрасываем ведущую единицу и приписываем смещенную экспоненту:
0 10000000 10010010000111111011011 =
= 0100 0000 0100 1001 0000 1111 1101 1011 =
= 0x40490FDB
В мантиссе 24 бита: 110010010000111111011011 = 13176795
Умножая на `2^-23`, получим 1,57079637050628662109375 - нормализованную мантиссу, а с учетом порядка это будет 3,1415927410125732421875
`pi = 3.1415926535897932384626433832795`
`pi_24 = 3,1415927410125732421875`
`|delta| = |pi_24 - pi| = 8,7422780003724856616720497115803e-8` - абсолютная погрешность
`|eps| = |delta|/pi = 2,7827535152856230129617753211538e-8` - относительная погрешность