栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

强制浮点在.NET中具有确定性?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

强制浮点在.NET中具有确定性?

8087 Floating Point
Unit芯片设计是Intel数十亿美元的错误。这个想法在纸面上看起来不错,给它一个8寄存器堆栈,以80位扩展精度存储值。这样就可以编写中间值不太可能丢失有效数字的计算。

但是,野兽是无法优化的。将值从FPU堆栈存储回内存的成本很高。因此,将它们保留在FPU中是一个强大的优化目标。如果计算足够深,那么只有8个寄存器将不可避免地需要回写。它还被实现为堆栈,而不是可自由寻址的寄存器,因此也需要进行体操操作,并且可能产生回写。不可避免地,回写会将值从80位
截断 为64位,从而失去精度。

因此后果是,未优化的代码不会产生与优化的代码相同的结果。当最终需要回写中间值时,对计算的小的更改可能会对结果产生很大的影响。/
fp:strict选项解决了这一问题,它迫使代码生成器发出回写以保持值一致,但不可避免且会造成性能损失。

这是一块完整的岩石,一个艰苦的地方。对于x86抖动,他们只是没有尝试解决问题。

英特尔在设计SSE指令集时没有犯同样的错误。XMM寄存器是可自由寻址的,并且不存储额外的位。如果要获得一致的结果,则可以使用AnyCPU目标和64位操作系统进行编译是快速的解决方案。x64抖动使用SSE而不是FPU指令进行浮点运算。尽管这增加了计算可以产生不同结果的第三种方式。如果由于丢失太多有效数字而导致计算错误,那么它将始终是错误的。的确,这有点像溴化物,但通常仅在程序员看来是这样。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416867.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号