c – 编译时与运行时常量

我正在开发自己的数学库来提高我的技能.我偶然发现了
boost’s constants header file,我问自己在运行时声明的常量上使用编译时常量是什么意思?

const float root_two = 1.414213562373095048801688724209698078e+00;
const float root_two = std::sqrt( 2.0f );

使用固定的编译时常量但是在运行带有函数的应用程序时进行计算时是不是会引入错误?
如果使用运行时常量,那么错误是否会被忽略?

最佳答案 >正如HansPassant所说,它可能会为你节省微瓦.但是,请注意,编译器有时会通过在编译期间评估表达式并在文字值中替换来优化它.请参阅我之前关于此问题的
this answer.

>使用固定的编译时常量时是否存在错误?

如果您正在使用任意精度数据类型.但是使用像double这样的普通数据类型更有效,并且这些数据仅限于大约16个十进制数字的精度.

>基于(2),您的第二次初始化不会比第一次初始化更精确.实际上,如果使用任意精度计算器预先计算平方根的值,则文字甚至可能更精确.

点赞