Я просто не могу понять числа с фиксированной и плавающей запятой из-за трудночитаемых определений о них по всему Google. Но никто, что я прочитал, не дает достаточно простого объяснения того, что они на самом деле. Могу ли я получить простое определение с примером?
Фиксированная точка против числа с плавающей запятой
Ответ 1
Число с фиксированной запятой имеет определенное количество бит (или цифр), зарезервированное для целочисленной части (часть слева от десятичной запятой), и определенное количество бит, зарезервированное для дробной части (часть справа от десятичной дроби). точка). Независимо от того, насколько велико или мало ваше число, оно всегда будет использовать одинаковое количество бит для каждой порции. Например, если ваш формат с фиксированной точкой был в десятичном IIIII.FFFFF
то наибольшее число, которое вы могли бы представить, было бы 99999.99999
а наименьшее ненулевое число было бы 00000.00001
. Каждый бит кода, который обрабатывает такие числа, должен иметь встроенные знания о том, где находится десятичная точка.
Число с плавающей запятой не резервирует определенное количество битов для целочисленной части или дробной части. Вместо этого он резервирует определенное количество бит для числа (называемого мантиссой или значимым) и определенное количество бит, чтобы сказать, где в этом числе находится десятичное место (называемое экспонентой). Таким образом, число с плавающей запятой, которое занимало 10 цифр с двумя цифрами, зарезервированными для показателя степени, могло бы представлять наибольшее значение 9.9999999e+50
и наименьшее ненулевое значение 0.0000001e-49
.
Ответ 2
Число с фиксированной точкой просто означает, что после десятичной точки есть фиксированное число цифр. Число с плавающей запятой допускает различное количество цифр после десятичной точки.
Например, если у вас есть способ хранения чисел, требующих ровно четырех цифр после десятичной точки, то это фиксированная точка. Без этого ограничения это плавающая точка.
Часто, когда используется фиксированная точка, программист фактически использует целое число, а затем делает предположение, что некоторые цифры находятся за десятичной точкой. Например, я мог бы сохранить две цифры точности, поэтому значение 100 означает, что на самом деле означает 1.00, 101 означает 1.01, 12345 означает 123.45 и т.д.
Числа с плавающей запятой являются более общей целью, поскольку они могут представлять очень маленькие или очень большие числа таким же образом, но есть небольшое наказание за то, что у вас есть дополнительное хранилище для места, в котором находится десятичная запятая.
Ответ 3
С моей точки зрения, арифметика с фиксированной точкой выполняется с использованием целых чисел. где десятичная часть хранится в фиксированном количестве бит или число умножается на количество цифр десятичной точности.
Например, если необходимо сохранить номер 12.34
, и после десятичной точки нам нужны только две цифры точности, число будет умножено на 100
, чтобы получить 1234
. При выполнении математики на этом номере мы будем использовать этот набор правил. Добавление 5620
или 56.20
к этому числу даст 6854
в данных или 68.54
.
Если мы хотим вычислить десятичную часть числа с фиксированной точкой, мы используем операнд modulo (%).
12.34 (псевдокод):
v1 = 1234 / 100 // get the whole number
v2 = 1234 % 100 // get the decimal number (100ths of a whole).
print v1 + "." + v2 // "12.34"
Числа с плавающей запятой - это совершенно другая история в программировании. Текущий стандарт чисел с плавающей запятой использует примерно 23 бита для данных числа, 8 бит для экспоненты и 1, но для знака. См. эту ссылку в Википедии для получения дополнительной информации об этом.
Ответ 4
Термин "неподвижная точка" относится к соответствующему виду, в котором представлены числа, с фиксированным числом цифр после, а иногда и до, десятичной точки. С представлением с плавающей запятой размещение десятичной точки может "плавать" относительно значимых цифр номера. Например, представление с фиксированной точкой с равномерным соглашением о размещении в десятичной точке может представлять числа 123.45, 1234.56, 12345.67 и т.д., Тогда как представление с плавающей запятой может дополнительно представлять 1.234567, 123456.7, 0.00001234567, 1234567000000000 и т.д.
Ответ 5
Возьмите номер 123.456789
- В качестве целого числа это число будет 123
- В качестве фиксированной точки (2) это число будет 123.46 (Предположим, вы округлили его).
- Как плавающая точка, это число будет 123.456789
Плавающая точка позволяет вам представлять большинство номеров с большой точностью. Исправлено менее точное, но проще для компьютера.