【发布时间】:2012-04-19 03:34:42
【问题描述】:
你好我有以下sn-p
for(int k = 0; k< 1000; ++k)
{
double acc = 1.0;
if(...)
{
short amSeq = 100;
for (short c = 0; c <= 21; ++c)
{
for (short kk = (Range.uSequences[k][c]), s = SeqComp[c]; kk != 0; --kk, --s, --amSeq)
{
acc *= static_cast<double>(s) / amSeq;
}
}
}
else
acc = 0;
}
我想知道是否有任何方法可以优化行 acc *= static_cast<double>(s) / amSeq; 删除 static_cast 将速度提高 200 倍,但显然会产生不正确的结果。谢谢
【问题讨论】:
-
s是什么类型?还是 SeqComp 呢?你说的是什么平台?但您可能会发现将其更改为“acc *= static_cast
(s) / amSeq;”将产生巨大的影响..尤其是如果您也将 acc 设为浮动... -
如果
SeqComp是double的数组,则不需要演员表。 -
@Goz:float 很少比 double 快,除非您使用标准库 C 函数(因为例如
sinf需要的精度低于sin它更快,而不是因为 float 快得多)。 -
@Robᵩ acc 是 double s 类型, amSeq 是 short 类型。
-
@nightcracker:我很确定你错了。我在许多平台上工作过,如果没有仿真,实际上就无法实现双精度。同样,在当今时代,几乎所有浮点代码都应该通过 SIMD 单元(即使是标量),毫无疑问,这些单精度总是比双精度运行得快。
标签: c++ optimization loops nested