相关疑难解决方法(0)

如果我将一个浮点数复制到另一个变量,它们会相等吗?

我知道使用==检查浮点变量的相等性不是一个好方法。但我只想通过以下陈述来了解这一点:

float x = ...

float y = x;

assert(y == x)
Run Code Online (Sandbox Code Playgroud)

既然y是从 复制的x,那么这个断言是真的吗?

c++ floating-point

167
推荐指数
3
解决办法
1万
查看次数

x87中的扩展(80位)双浮点,而不是SSE2 - 我们不会错过它?

我今天正在阅读研究人员发现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操作?

floating-point sse2 x87

35
推荐指数
2
解决办法
1万
查看次数

如何摆脱CUDA和CPU之间对数的不同结果?

我想使用 CUDA 在 GPU 中实现一个算法。同时我用C++写了一个CPU版本来验证GPU版本的结果。但是我log()在 CPU 和 GPU 中使用时遇到了麻烦。一个非常简单的算法(在 CPU 和 GPU 上都使用)如下所示:

float U;
float R = U * log(U);
Run Code Online (Sandbox Code Playgroud)

但是,当我比较 CPU 端的结果时,我发现有很多结果(1843161 中的 459883)具有很小的差异(最大差异为 0.5)。部分结果如下所示:

U       -- R (CPU side)  -- R (GPU side)  -- R using Python (U * math.log(U))

86312.0 -- 980998.375000 -- 980998.3125   -- 980998.3627440572
67405.0 -- 749440.750000 -- 749440.812500 -- 749440.7721980268
49652.0 -- 536876.875000 -- 536876.812500 -- 536876.8452369706
32261.0 -- 334921.250000 -- 334921.281250 -- 334921.2605240216
24232.0 -- 244632.437500 -- 244632.453125 -- 244632.4440747978 …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point cuda

2
推荐指数
1
解决办法
725
查看次数

标签 统计

floating-point ×3

c++ ×2

cuda ×1

sse2 ×1

x87 ×1