Mar. 13th, 2025

%a

Mar. 13th, 2025 07:00 am
netch80: (Default)
Из серии "мелких удивлений", почему так всё странно:
Когда появилась двоичная плавающая точка, естественно было бы ожидать, что сразу появится и вариант текстового ввода-вывода в двоичном виде (возможно, свёрнутого до восьмеричного или шестнадцатиричного), который даёт:
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 на всё.

Инерция эта выглядит более психологическим, чем технологическим фактором.
netch80: (Default)
Seems apparent, but only after occasionally found this.


>>> "{}".format(math.pi)
'3.141592653589793'
>>> "{:{}}".format(math.pi, 'f')
'3.141593'
>>> "{:{}}".format(math.pi, '.14f')
'3.14159265358979'

>>> f"{math.pi}"
'3.141592653589793'
>>> pr=10
>>> f"{math.pi:.{pr}e}"
'3.1415926536e+00'


And even:


>>> "{:{}}".format(math.pi, '.16e')
'3.1415926535897931e+00'
>>> f"{math.pi:{'.12e'}}"
'3.141592653590e+00'


But this way isnʼt allowed:


>>> f"{math.pi:{\".12e\"}}"
  File "", line 1
    f"{math.pi:{\".12e\"}}"
                           ^
SyntaxError: f-string expression part cannot include a backslash


but we can override it with a trick:


>>> f"{math.pi:{'.12e'}}"
'3.141592653590e+00'
>>> f"""{math.pi:{".12e"}}"""
'3.141592653590e+00'


Not an often case but still useful.

Profile

netch80: (Default)
netch80

September 2025

S M T W T F S
 123456
78910111213
1415 1617 181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 1st, 2026 09:26 pm
Powered by Dreamwidth Studios