【发布时间】:2013-03-01 11:08:22
【问题描述】:
我有一个用 C++ 编写的程序,它生成用于数学计算的 C 源代码。我注意到常量在生成的代码中占用了很多空间,我正在寻找更紧凑的表示。
为了生成常量,我现在使用:
double v = ...
cfile << std::scientific << std::setprecision(std::numeric_limits<double>::digits10 + 1) << v;
我很确定这是一种无损表示,但它也非常臃肿。例如,零和一将表示为 0.00000000000000000e+00 和 1.0000000000000000e+00。和“0”。或“1”。携带同样多的信息。
有没有办法以更紧凑但仍然无损的方式将常量打印到文件中?对于人类读者来说,它不需要看起来很好,只需在以纯 C 代码出现时进行编译(如果是 C99,我希望它也是有效的 C++)。如果它是可移植的,十六进制可能没问题。
编辑:删除了代码 sn-p 中的 std::fixed。
【问题讨论】:
-
已经有一段时间了,但是看here,霍夫曼编码可能适合你。
-
也许我理解错了,但删除尾随零不是解决方案吗?
-
@kotlinski 这不是重复的。该问题要求进行二进制序列化。这个想要以有效的 C/C++ 代码格式输出数字。
标签: c++ c hex code-generation lossless