Фиксированная точка против числа с плавающей точкой - PullRequest
91 голосов
/ 23 сентября 2011

Я просто не могу понять числа с фиксированной и плавающей точкой из-за трудно читаемых определений о них во всем Google. Но ни одно из того, что я прочитал, не дает достаточно простого объяснения того, чем они на самом деле являются. Могу ли я получить простое определение с примером?

Ответы [ 5 ]

120 голосов
/ 23 сентября 2011

Число с фиксированной запятой имеет определенное количество бит (или цифр), зарезервированное для целочисленной части (часть слева от десятичной запятой), и определенное количество бит, зарезервированное для дробной части (часть справадесятичной точки).Независимо от того, насколько велико или мало ваше число, оно всегда будет использовать одинаковое количество бит для каждой порции.Например, если ваш формат с фиксированной запятой имеет десятичное значение IIIII.FFFFF, то наибольшее число, которое вы можете представить, будет 99999.99999, а наименьшее ненулевое число будет 00000.00001.Каждый бит кода, который обрабатывает такие числа, должен иметь встроенную информацию о том, где находится десятичная точка.

Число с плавающей запятой не резервирует определенное количество битов для целой части или дробной части.Вместо этого он резервирует определенное количество бит для числа (называемого мантисса или значный ) и определенное количество бит, чтобы сказать , где в этом числе десятичноеместо сидит (называется показатель ).Таким образом, число с плавающей запятой, которое занимало 10 цифр с двумя цифрами, зарезервированными для показателя степени, может представлять наибольшее значение 9.9999999e+50 и наименьшее ненулевое значение 0.0000001e-49.

29 голосов
/ 23 сентября 2011

Число с фиксированной точкой означает, что после десятичной точки есть фиксированное количество цифр. Число с плавающей запятой допускает различное количество цифр после запятой.

Например, если у вас есть способ хранения чисел, который требует ровно четыре цифры после десятичной точки, то это фиксированная точка. Без этого ограничения это с плавающей точкой.

Часто, когда используется фиксированная точка, программист фактически использует целое число, а затем делает предположение, что некоторые цифры находятся за запятой. Например, я мог бы захотеть сохранить две цифры точности, поэтому значение 100 означает на самом деле 1,00, 101 означает 1,01, 12345 означает 123,45 и т. Д.

Числа с плавающей запятой имеют более общее назначение, потому что они могут представлять очень маленькие или очень большие числа одинаково, но существует небольшая штраф за необходимость иметь дополнительное место для хранения десятичного знака.

3 голосов
/ 21 февраля 2017

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

Например, если нужно сохранить число 12.34 и нам нужно только две цифры точности после десятичной точки, число умножается на 100, чтобы получить 1234. При выполнении математики для этого числа мы использовали этот набор правил. Добавление 5620 или 56.20 к этому числу приведет к 6854 в данных или 68.54.

Если мы хотим вычислить десятичную часть числа с фиксированной запятой, мы используем операнд по модулю (%).

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, но для знака. См. Эту ссылку Википедии для получения дополнительной информации об этом.

2 голосов
/ 19 июня 2014

Термин «фиксированная точка» относится к соответствующему способу представления чисел с фиксированным числом цифр после, а иногда и до десятичной точки. При представлении с плавающей точкой размещение десятичной точки может «плавать» относительно значащих цифр числа. Например, представление с фиксированной запятой с единообразным условием размещения десятичной точки может представлять числа 123,45, 1234,56, 12345,67 и т. Д., Тогда как представление с плавающей запятой может дополнительно представлять 1,234567, 123456,7, 0,00001234567, 1234567000000000 и т. Д.

0 голосов
/ 23 сентября 2011

Возьмите номер 123.456789

  • Как целое число, это число будет 123
  • Как фиксированная точка (2), это число будет 123,46 (при условии, что вы округлили его)
  • Как число с плавающей запятой, это число будет 123,456789

Число с плавающей точкой позволяет вам представлять практически каждое число с большой точностью. Исправлено менее точно, но проще для компьютера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...