![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Мне по работе периодически приходится дебажить арифметический хардвер, в том числе вещественную арифметику. Каждый бит на счету, поэтому десятичное представление плавающей точки не годится. К счастью, умные люди изобрели hexfloat, формат вещественных чисел, где каждый бит явно представлен, и ничего не теряется.
Стал я искать простой калькулятор, чтобы из командной строки быстренько прикинуть пару формул с hexfloat. Обычно если надо что-то посчитать, я зову python3 или pdc. Всё у них хорошо, кроме hexfloat.
Неожиданно оказалось, что существует прилада, дающая интерактивный Си++ примерно в том же стиле, что и Питон. Называется cling. Внутри это clang/llvm, так что за надёжность можно не беспокоиться. Вот пример.
Стал я искать простой калькулятор, чтобы из командной строки быстренько прикинуть пару формул с 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
no subject
Date: 2023-10-24 04:05 (UTC)no subject
Date: 2023-10-24 15:37 (UTC)no subject
Date: 2023-10-27 00:41 (UTC)