vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2023-10-23 07:26 pm

Искал калькулятор с hexfloat, нашёл cling

Мне по работе периодически приходится дебажить арифметический хардвер, в том числе вещественную арифметику. Каждый бит на счету, поэтому десятичное представление плавающей точки не годится. К счастью, умные люди изобрели hexfloat, формат вещественных чисел, где каждый бит явно представлен, и ничего не теряется.

Стал я искать простой калькулятор, чтобы из командной строки быстренько прикинуть пару формул с hexfloat. Обычно если надо что-то посчитать, я зову python3 или pdc. Всё у них хорошо, кроме hexfloat.

Неожиданно оказалось, что существует прилада, дающая интерактивный Си++ примерно в том же стиле, что и Питон. Называется cling. Внутри это clang/llvm, так что за надёжность можно не беспокоиться. Вот пример.
$ cling

****************** CLING ******************
* Type C++ code and press enter to run it *
* Type .q to exit *
*******************************************
[cling]$ 2*3*4
(int) 24

[cling]$ 0x1.151a4cp-7 * 0x1.9bb298p+27
(double) 1825320.6

[cling]$ printf("%a\n", 0x1.151a4cp-7 * 0x1.9bb298p+27)
0x1.bda288d4752p+20
(int) 20

[cling]$ printf("%a\n", (float)(0x1.151a4cp-7 * 0x1.9bb298p+27))
0x1.bda288p+20
(int) 15

[cling]$ #include <cfloat>
[cling]$ FLT_MAX
(float) 3.40282e+38f

[cling]$ printf("%a\n", FLT_MAX)
0x1.fffffep+127
(int) 16

[cling]$ printf("%a\n", DBL_MAX)
0x1.fffffffffffffp+1023
(int) 24
spamsink: (Default)

[personal profile] spamsink 2023-10-24 03:58 am (UTC)(link)
Это классно!
spamsink: (Default)

[personal profile] spamsink 2023-10-24 04:00 am (UTC)(link)
printf("%a\n", FLT_MAX)
0x1.fffffep+127


А куда 0x1.ffffffp+127 дели?
spamsink: (Default)

[personal profile] spamsink 2023-10-24 03:37 pm (UTC)(link)
Досадно, что число в такой записи и 16-ричный вид константы отличаются из-за разницы в выравнивании. Хотелось бы иметь и вариант представления 0x1.7fffffp+127
juan_gandhi: (Default)

[personal profile] juan_gandhi 2023-10-24 05:04 am (UTC)(link)

О какие две классные вещи! (Где-то был мой фортовый интерпретатор плавающих, на все 80 бит...)