我注意到有很多关于浮点计算错误的问题的讨论,要求您比==使用更复杂的比较.然而,所有这些文章似乎都假设值被操纵(或双重计算),而我没有看到一个例子,覆盖一个非常简单的常量复制.
const double magical_value = -10; class Test { double _val; public: Test() : _val(magical_value) { } bool is_special() { return _val == magical_value; } };
据我所知,magical_value应该在编译时设置,以便在这一点上进行所有的舍入.之后,该值应该被复制到类中,并与原来的值进行比较.这样的比较保证是安全的吗?或者可以复制或比较在这里引入错误?@H_301_3@
请不要建议替代比较或神奇的价值使用方法,这是另一个主题.我只是好奇这个假设.@H_301_3@
编辑:只是为了注意,我有些担心,在某些架构上,优化可能导致将值复制到不同大小的浮点寄存器,从而导致精确值的差异.有这样的风险吗?@H_301_3@