2012-06-05 1 views
1

Для начала позвольте мне признаться, что я опытный программист, у которого более 10 лет опыта программирования. Тем не менее, вопрос, который я задаю здесь, - это тот, который с тех пор раздражает меня, я впервые взял книгу о C около десяти лет назад.Значение Precision Vs. Диапазон двойных типов

Ниже приведена выдержка из книги на Python, объясняющей о плавающем типе Python.

числа с плавающей точкой представлены с использованием нативного с двойной точностью (64-битный) Представление чисел с плавающей точкой на машине. Обычно это IEEE 754, который обеспечивает приблизительно 17 цифр точности и экспоненты в диапазоне от -308 до 308.This является такой же, как двойного типа в C.

То, что я никогда не понимал это смысл фразы

«... которая обеспечивает приблизительно 17 цифр точности и показателя в диапазоне от -308 до 308 ...»

интуиция здесь сбивается, так как я могу понять значение точности, но как диапазон может отличаться от этого. Я имею в виду, если число с плавающей запятой может представлять значение до 17 цифр (т. Е. Максимум 1 000 000 000 000 000 000 - 1), то как показатель может быть +308. не будет составлять 308-значное число, если показатель составляет 10 или приблизительное 100-значное число, если показатель равен 2.

Надеюсь, я могу выразить свое замешательство.

С уважением Vaid Абхишек

ответ

-2

С Wiki, двойной точности с плавающей запятой числа должны иметь точность до 17 цифр или 17 SF. Показатель может находиться в диапазоне от -1022 до 1023.
Их -308 до 308 будет представлять собой ошибку, иначе идея не будет полностью объяснена.

2

Предположим, что мы пишем 1500 с двумя цифрами точности. Это означает, что мы достаточно точны, чтобы отличать 1500 от 1600 и 1400, но не достаточно точны, чтобы отличать 1500 от 1510 или 1490. Говоря эти цифры, потребуется три цифры точности.

Несмотря на то, что я написал четыре цифры, представление с плавающей запятой не обязательно содержит все эти цифры. 1500 составляет 1,5 * 10^3. В десятичном представлении с плавающей запятой, с двумя цифрами точности, будут сохранены только первые две цифры числа и экспонента, которые я напишу (1.5, 3).

Почему существует разница между «настоящими» цифрами и нумерами нулей? Поскольку он говорит нам, как точно мы можем представлять числа, то есть , какая часть их значения теряется из-за аппроксимации. Мы можем отличить 1500 = (1,5, 3) от 1500 + 100 = (1,6, 3). Но если мы увеличим показатель, мы не сможем отличить 15000 = (1,5, 4) от 15000 + 100 = (1.51, 4). В лучшем случае мы можем аппроксимировать числа в пределах +/- 10% с точностью до двух десятичных цифр. Это верно независимо от того, насколько маленьким или большим может быть показателем экспоненты.

Смежные вопросы