Цитата: Longspig от 29.04.2021 21:27:41"Относительной" точность в FPU становится лишь выше значения 2**64-1 (знак забирает разряд из поля порядка и тут не участвует). Но операции целочисленого сохранения всегда знаковые, так что разряд теряем (2**63-1). До этого предела, точность представления любого целого числа в FPU абсолютная.
Прекрасно работал с целыми 64-битными числами через FPU.
Вы просто не понимаете, что такое "абсолютная точность" и что такое "относительная точность", а также что такое "логарифмическая равномерность".
Вещественное число за редчайшим исключением (как говорят математики, "везде, за исключением выколотых точек") не может быть представлено в формате IEEE 754 точно. Это называется "погрешность представления".
У любого вещественного числа есть два ближайших к нему числа, которые точно представимы в формате IEEE 754 – одно меньше, другое больше.
Это имеет место для представления вещественных чисел по любому основанию в форме мантиссы и порядка.
Разность между этими двумя рядом расположенными числами тем меньше, чем ближе к нулю они расположены. Зато их отношение остается постоянным для всего диапазона. Это называется "логарифмическая равномерность представления вещественных чисел в форме с мантиссой и порядком".
Для целых, в отличие от вещественных, какие вы бы не брали рядом расположенные числа, у них разность будет постоянна, а отношение тем ближе к единице, чем числа больше. Это же справедливо и для формата с фиксированной запятой, поскольку она есть не что иное, как масштабированное целое.
Если сходу не понятно, то просто возьмите два любых числа в формате IEEE 754 и помасштабируйте, меняя порядок. Разность между ними будет различной, а отношение останется без изменения. Это и называется относительной точностью. По аналогии с погрешностью измерений. Только здесь погрешность представления.
...
Окуда вы взяли "2**64-1", не понятно. Это число никакого отношения к FPU не имеет вообще. Вот из IEEE 754-2008 таблица с параметрами
И еще – FPU не работает с целыми. Просто почитайте "Intel 64 and IA-32 Architectures Software Developer's Manual" – там все расписано. Может загружать целое, при этом оно преобразуется во внутренний формат и все операции выполняются как с плавающими. Это значит, что при арифметических операциях Вы получите результат, отличный от того, что получили бы на CPU. Будете делить 5 на 2 и получите либо 2, либо 3, в зависимости от того, как будет установлено округление в RC. Вот цитата:
"The x87 FPU recognizes and operates on the following seven data types: single-precision floating point, double-precision floating point, double extended-precision floating point,
signed word integer,
signed doubleword integer,
signed quadword integer, and packed BCD decimal integers.
With the exception of the 80-bit double extended-precision floating-point format,
all of these data types exist in memory only. When they are loaded into x87 FPU data registers, they are converted into double extended-precision floating-point format and operated on in that format.
У меня складывается впечатление, что Вы вообще никогда с плавающей запятой не работали. Разве что в питоне или матпакете.