%a

Mar. 13th, 2025 07:00 am
netch80: (Default)
[personal profile] netch80
Из серии "мелких удивлений", почему так всё странно:
Когда появилась двоичная плавающая точка, естественно было бы ожидать, что сразу появится и вариант текстового ввода-вывода в двоичном виде (возможно, свёрнутого до восьмеричного или шестнадцатиричного), который даёт:
1) точность передачи значения;
2) избавление от сложного и дорогого кода преобразования путём умножения и деления (который ещё долго был неточным, а для точного требуется многословная арифметика - для double это 1000+ бит в предельном случае, а ещё база констант в помощь самому преобразованию и тонкая шлифовка частных случаев).

Пример: "0x1.921fb54442d18p+1" (число π в double).

Тем не менее, в Fortran этого нет до сих пор, насколько я знаю - а там я ожидал бы в первую очередь. В C появилось в C99 ("%a" в printf, scanf). Аналогичные форматные методы ещё в десятке актуальных языков (Go, Lua, Matlab, OCaml, Perl, PHP, R, Ruby, Rust, Swift, Zig, спасибо ИИ за поиск). В C++ - режим iostream, с C++11 (std::hexfloat). В Python, Ada, Java, Julia, Haskell - нет форматного знака, есть отдельные методы (например, hex(), from_hex()). В некоторых других - требуются отдельные библиотеки, особенно странно про Javascript, где и целых-то нет, есть double на всё.

Инерция эта выглядит более психологическим, чем технологическим фактором.

Date: 2025-03-13 10:20 am (UTC)
gegmopo4: (Default)
From: [personal profile] gegmopo4

Для людей цей формат нечитабельний, а для машини бінарний формат простіший і швидший. Єдине застосування цього формату, що приходить мені на думку, -- якщо ви імплементуєте IEEE 754 чи щось пов'язане. Але це настільки рідкісний випадок, що і спеціальна бібліотека годиться.

Date: 2025-03-13 06:27 pm (UTC)
gegmopo4: (Default)
From: [personal profile] gegmopo4

Досвіду немає, бо воно практично нікому не потрібно. Ось буквально вчора розбирався з багованим fma() -- цей формат використовувався в тестах. Хоча можна було б і без нього обійтися. А перед цим я стикався з цим форматом може раз на пару років.

35 років тому я читав з екрану 8-ковий дамп пам'яті -- це був мій дизасемблер. Якби довелося так копатися в плаваючій точці -- написав би конвертер, якщо немає готового. Але це виняткові випадки, більшості програмістів це не потрібне буде ніколи в житті.

Profile

netch80: (Default)
netch80

January 2026

S M T W T F S
    1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 2nd, 2026 10:31 am
Powered by Dreamwidth Studios