Xargam Ответов: 2

О номере точки флотации максимальное значение


Я знаю, что максимальная точка флотации может быть рассчитана вышеуказанным способом:
Имея 1.11111111111111111111111111 (24 бита), то десятичная точка перемещается на то же количество мест, что и максимальная экспонента, поэтому максимальное число равно:
111111111111111111111111110000000000000000[..] (24 единицы и (127 - 23 нуля), что приводит к 128-битному числу), то я могу получить максимальное число точек флотации:
(2^128-1) - (2^104-1) = 340282346638528859811704183484516925440.0
¿Почему 340282346638528859811704183484516925440.0 не появляется в компиляторе Codeblocks?

Что я уже пробовал:

Вы можете увидеть номер печати макроса FLT_MAX на ГДБ онлайн отладчик | компилятор - код, компиляции, запуска, отладки онлайн С, С++[^] но не в компиляторе codeblocks :
https://i.ibb.co/zQXzNFH/flt-max.png

Richard MacCutchan

У вас есть вопрос?

Patrice T

А у вас есть вопрос ?

2 Ответов

Рейтинг:
14

CPallini

Я полагаю, что это артефакт из %f описатель.
Попробуйте использовать %a в обеих системах.


Xargam

Обе системы печатают шестнадцатеричное число

CPallini

Важный вопрос заключается в следующем: "печатают ли обе системы тот же шестнадцатеричная строка?"

Xargam

да, это так.

CPallini

Итак, они одинаковы. То есть бинарный паттерн в памяти точно такой же (тот, который вы ожидаете, я думаю). Различные выходные данные обусловлены различными реализациями обработки спецификатора printf %f.

Stefan_Lang

Я не ожидал, что это printf - есть 5!

CPallini

Большое тебе спасибо, Стефан. И возьми мою пятерку тоже.

Xargam

Отлично! Спасибо!

CPallini

Добро пожаловать.

Рейтинг:
0

Stefan_Lang

Число, которое вы придумали, может быть FLT_MAX, а может и не быть. Стандарт для языка C определяет, что язык должен предоставлять значение FLT_MAX, но он не требует, чтобы это значение было одинаковым для каждого компилятора. Фактическое значение зависит от формата, который компилятор использует для хранения значения float.

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


CPallini

"вам понадобится 33 бита, чтобы сохранить его с местом для знака бит"
Нет. То 1 слева от десятичной точки находится неявная точка. Видеть
https://en.wikipedia.org/wiki/IEEE_754

Stefan_Lang

Вы правы, я задавался этим вопросом и посмотрел его. Исправлено мое утверждение, хотя, поскольку большинство компиляторов в настоящее время используют IEEE, это может быть не тот ответ, который искал OP.

Xargam

У меня нет документации по компилятору.Можно ли его найти?Это обычно публичное место?

Stefan_Lang

Он должен идти вместе с компилятором: если он предлагает графический пользовательский интерфейс, вы, вероятно, можете получить к нему доступ с помощью клавиши F1 или через меню справки.

Он также может быть общедоступным, но быстрый поиск по "формату кодовых блоков с плавающей запятой" оказался пустым. :-( возможно, помогут другие ключевые слова.

Stefan_Lang

P.S.: Я нашел здесь кое-какую документацию: http://www.codeblocks.org/user-manual

К сожалению, ни слова о представлении с плавающей запятой.

Xargam

Большое вам спасибо за то, что вы следуете за мной!