我今天正在阅读研究人员发现NVidia的Phys-X库使用x87 FP与SSE2.显然,对于速度超过精度的并行数据集来说,这将是次优的.然而,文章作者继续引用:
英特尔在2000年末引入P4后开始不鼓励使用x87.AMD自2003年K8以来已弃用x87,因为x86-64定义为SSE2支持; VIA的C7自2005年以来一直支持SSE2.在64位版本的Windows中,x87不适用于用户模式,完全禁止在内核模式下使用.自2005年以来,业内所有人都推荐SSE超过x87,除非软件必须在嵌入式Pentium或486上运行,否则没有理由使用x87.
我想知道这件事.我知道x87内部使用80位扩展双精度值来计算值,而SSE2则不然.这对任何人都没关系吗?这对我来说似乎很惊讶.我知道当我对平面中的点,线和多边形进行计算时,在进行减法时,值可能出乎意料地错误,并且由于缺乏精度,区域可能会折叠并且线条会相互别名.我想,使用80位值与64位值可能会有所帮助.
这是不正确的?如果没有,如果x87被淘汰,我们可以用什么来执行扩展的双FP操作?
我在VBA中有这个模糊的舍入问题.
a = 61048.4599674847
b = 154553063.208822
c = a + b
debug.print c
Result:
154614111.66879
Run Code Online (Sandbox Code Playgroud)
这是一个问题,为什么VBA取代了变量c?我没有发出任何舍入功能.我期待的价值是154614111.6687894847.即使我将变量c舍入或格式化为15位小数,我仍然没有达到预期的结果.
任何解释将不胜感激.
编辑:
使用cDec获得了预期的结果.我在Jonathan Allen的回复中已经读过这个为什么CLng会产生不同的结果?
以下是测试结果:
a = cDec(61048.4599674847)
b = cDec(154553063.208822)
c = a + b
?c
154614111.6687894847
Run Code Online (Sandbox Code Playgroud)