Можно ли классифицировать различные формы аппроксимации чисел с плавающей точкой

Мне просто интересно, можем ли мы создать правила для формы аппроксимации действительных чисел с использованием чисел с плавающей запятой.

Например, число с плавающей точкой может быть завершено 1.xxx777777 (так заканчивается на бесконечное число 7 экземпляром и, в конце концов, случайная цифра в конце)?

Я считаю, что существует только эта форма числа с плавающей точкой:

1. точное значение.

2. значение как 1.23900008721…. так где 1.239 аппроксимируется цифрами, которые отображаются как «шум», но с 0 между точным значением и этим шумом

3. значение как 3.2599995, где 3.26 аппроксимируется путем добавления 9999.. и последняя цифра (как 5), так что аппроксимируется с плавающим числом чуть ниже действительного числа

4. значение как 2.000001, где 2.0 аппроксимируется с плавающим числом чуть выше действительного числа

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 «шумовых» цифр при их вызове. Цифры шума иногда все нули, и значащие цифры могут также заканчиваться кучей нулей.

3

Другие решения

Плавающая точка представлена ​​битами. Что это значит:

  1. 1 бит переворачивается после десятичного числа 0,5 или 1/2
  2. 01 бит равен 0,25 или 1/4
  3. и т.п.

Это означает, что число с плавающей запятой всегда приблизительно близко, но не является точным, если оно не является точной степенью 2, когда представлено в терминах того, что машина может выдержать

Рациональное число может быть очень точно представлен машиной (конечно, не точно, если не в степени два ниже десятичной точки), но иррациональные числа всегда будет нести ошибку. С точки зрения этого ваш вопрос не столько связан с c++ относительно computer architecture,

0

По вопросам рекламы [email protected]