Кажется, вы можете представить эти числа как 2 целых числа:
Вы могли бы представить эти значения как 2 целых числа, но это было бы действительно неэффективно, и вы нарушили бы стандарт IEEE 754, который определяет числа с плавающей запятой в конкретной архитектуре.
Итак, я начинаю с простого понимания, почему числа с плавающей запятой не могут быть просто представлены как целые числа.
Они на самом деле представлены целыми числами. Стандарт IEEE 754 определяет следующее в отношении формата с плавающей запятой. Как и для любого типа, который вы можете определить, вы ограничены тем, что понимает архитектура, в случае чисел, которые будут по существу целыми числами.
Конечные числа, которые можно описать тремя целыми числами: s = знак (ноль или один), c = значимое и (или коэффициент), имеющий не более p цифр, когда записывается в основание b (т. Е. Целое число в диапазоне от 0 до bp − 1) и q = показатель степени такой, что emin ≤ q + p − 1 ≤ emax. Числовое значение такого конечного числа равно (−1) s × c × bq. [A] Кроме того, существует два нулевых значения, называемых нулями со знаком: знаковый бит указывает, равен ли ноль +0 (положительный ноль) или - 0 (отрицательный ноль).
Источник
Причина, по которой я заинтересован, заключается в том, что мне было бы интересно представлять произвольные числа с плавающей точкой для математических целей, и в то же время обрабатывать обычные «маленькие» числа с плавающей точкой, такие как 1.1 и 1.123, для анимации или других целей. И система будет просто иметь «числовой» тип, чтобы обрабатывать оба случая одинаково.
Большинство языков программирования позволяют вам определять новый тип, затем вы можете определить новый формат с плавающей запятой, если вы следуете стандарту. Это означает, что тип должен обрабатывать три целых числа, как определено стандартом IEEE.
Не уверен, что если вы говорите, что следование стандарту IEEE с 3 целыми числами приведет к хорошей производительности или нет, по сравнению с использованием аппаратных регистров с плавающей запятой и тому подобного.
Я еще раз повторю, что то, что вы описываете, будет нарушать стандарт IEEE. Это также было бы неэффективно. Чтобы понять причину, большинство языков программирования не пытаются определить тип с плавающей запятой с точностью до одной цифры, вам нужно понимать компьютерные регистры. Размер компьютерного регистра является конкретным, что означает, что 32-разрядный регистр будет хранить 32-разрядные, даже если они содержат все 0, поэтому с плавающей запятой с точностью до одной цифры все равно будет использоваться 32-разрядный регистр.
Другими словами, все ваши примеры уже обработаны уже существующим форматом с плавающей запятой одинарной точности.
Источник
Вы можете определить формат с одной цифрой знака, одной цифрой экспоненты и одной цифрой дроби, но это займет тот же объем памяти, что и формат, описанный на рисунке. Так что это было бы крайне неэффективно по одной только этой причине.