Мне просто интересно, можем ли мы создать правила для формы аппроксимации действительных чисел с использованием чисел с плавающей запятой.
Например, число с плавающей точкой может быть завершено 1.xxx777777
(так заканчивается на бесконечное число 7 экземпляром и, в конце концов, случайная цифра в конце)?
Я считаю, что существует только эта форма числа с плавающей точкой:
1. точное значение.
2. значение как 1.23900008721
…. так где 1.239
аппроксимируется цифрами, которые отображаются как «шум», но с 0 между точным значением и этим шумом
3. значение как 3.2599995
, где 3.26
аппроксимируется путем добавления 9999..
и последняя цифра (как 5
), так что аппроксимируется с плавающим числом чуть ниже действительного числа
4. значение как 2.000001
, где 2.0
аппроксимируется с плавающим числом чуть выше действительного числа
Вы думаете в терминах десятичных чисел, то есть чисел, которые могут быть представлены как n*(10^e)
, с e
либо положительный, либо отрицательный. Эти числа встречаются в ваших мыслительных процессах по историческим причинам, связанным с наличием десяти пальцев.
Номера компьютеров представлены в двоичном виде по техническим причинам, связанным с наличием или отсутствием электрического сигнала.
Когда вы имеете дело с маленькими целочисленными числами, не имеет большого значения, что представление компьютера не совпадает с вашим собственным, потому что вы думаете о точном приближении математического числа, как и компьютер, так что по транзитивности вы и вы компьютер думает об одном и том же.
С очень большими или очень маленькими числами вы будете склонны думать с точки зрения степеней десяти, а компьютер определенно будет думать с точки зрения степеней двойки. В этих случаях вы можете наблюдать разницу между вашей интуицией и тем, что делает компьютер, а также ваша классификация — нонсенс. Двоичные числа с плавающей запятой не являются ни более плотными, ни менее плотными близкими числами, которые имеют компактное представление в виде десятичных чисел. Они просто представлены в двоичном виде, n*(2^p)
, с p
либо положительный, либо отрицательный. Многие действительные числа имеют только приблизительное представление в десятичном виде, а многие действительные числа имеют только приблизительное представление в двоичном виде. Эти числа не одинаковы (двоичные числа могут быть представлены в десятичном виде, но не всегда компактно. Некоторые десятичные числа вообще не могут быть представлены точно в двоичном виде, например, 0,1).
Если вы хотите понять числа с плавающей точкой компьютера, вы должен хватит думать в десятичном виде. 1.23900008721....
не является особенным, и не является 1.239
, 3.2599995
не является особенным, и не является 3.26
, Вы считать они особенные, потому что они точно или близки к компактным десятичным числам. Но это не имеет никакого значения в двоичной с плавающей точкой.
Вот несколько фрагментов информации, которые могут вас заинтересовать, поскольку вы пометили свой вопрос C ++:
Если вы печатаете число двойной точности с форматом %.16e
, вы получите десятичное число, которое преобразует обратно в оригинал double
, Но это не всегда отражает точное значение оригинала. double
, Чтобы увидеть точное значение double
в десятичном виде, вы должны использовать %.53e
, Если ты пишешь 0.1
в программе компилятор интерпретирует это как значение 1.000000000000000055511151231257827021181583404541015625e-01
, который является относительно компактным числом в двоичном. Ваш вопрос говорит о 3.2599995 и 2.000001, как будто это числа с плавающей запятой, но это не так. Если вы напишите эти числа в программе, компилятор интерпретирует их как 3.25999950000000016103740563266910612583160400390625
а также
2,00000100000000013977796697872690856456756591796875. Таким образом, шаблон, который вы ищете, прост: десятичное представление числа с плавающей запятой — это всегда 17 значащих цифр, за которыми следуют 53-17 = 36 «шумовых» цифр при их вызове. Цифры шума иногда все нули, и значащие цифры могут также заканчиваться кучей нулей.
Плавающая точка представлена битами. Что это значит:
Это означает, что число с плавающей запятой всегда приблизительно близко, но не является точным, если оно не является точной степенью 2, когда представлено в терминах того, что машина может выдержать
Рациональное число может быть очень точно представлен машиной (конечно, не точно, если не в степени два ниже десятичной точки), но иррациональные числа всегда будет нести ошибку. С точки зрения этого ваш вопрос не столько связан с c++
относительно computer architecture
,