c – “const”双重复制比较安全吗?
我注意到有很多关于浮点计算错误的问题的讨论,要求您比==使用更复杂的比较.然而,所有这些文章似乎都假设值被操纵(或双重计算),而我没有看到一个例子,覆盖一个非常简单的常量复制.
请考虑以下内容: const double magical_value = -10; class Test { double _val; public: Test() : _val(magical_value) { } bool is_special() { return _val == magical_value; } }; 据我所知,magical_value应该在编译时设置,以便在这一点上进行所有的舍入.之后,该值应该被复制到类中,并与原来的值进行比较.这样的比较保证是安全的吗?或者可以复制或比较在这里引入错误? 请不要建议替代比较或神奇的价值使用方法,这是另一个主题.我只是好奇这个假设. 编辑:只是为了注意,我有些担心,在某些架构上,优化可能导致将值复制到不同大小的浮点寄存器,从而导致精确值的差异.有这样的风险吗? 解决方法
是的,安全(这是复制操作的要求,由=表示).只要源和目的地类型相同,就不需要担心转换/促销. 但是,请注意,magical_value可能不完全包含10,而是近似值.这个近似将被复制到_val. 给定const限定符,有可能magical_value可能被优化掉(如果你打开优化)或按原样使用(即没有内存可能被用尽). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- C#写入对象或集合类型数据到xml文件的方法
- BlazeDS开发指南 (转载)
- xml – DTD中PCDATA和CDATA之间的差异
- Dojo 动画<13>
- [Swift Weekly Contest 122]LeetCode985. 查询后的偶数和 |
- cocos2d-x(2.x) CCApplication源码分析
- 使用Quick Look框架对文件进行预览
- 解决oracle中sqlplus客户端命令行中出现^H字符以及不能使用
- postgresql – 如何在没有文件或内存的情况下将IO :: Handl
- ruby-on-rails-3 – 设计与omniauth-facebook“无效的凭据”