相关疑难解决方法(0)

为什么将0.1f改为0会使性能降低10倍?

为什么这段代码,

const float x[16] = {  1.1,   1.2,   1.3,     1.4,   1.5,   1.6,   1.7,   1.8,
                       1.9,   2.0,   2.1,     2.2,   2.3,   2.4,   2.5,   2.6};
const float z[16] = {1.123, 1.234, 1.345, 156.467, 1.578, 1.689, 1.790, 1.812,
                     1.923, 2.034, 2.145,   2.256, 2.367, 2.478, 2.589, 2.690};
float y[16];
for (int i = 0; i < 16; i++)
{
    y[i] = x[i];
}

for (int j = 0; j < 9000000; j++)
{
    for (int i = 0; i < 16; i++)
    {
        y[i] *= …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point performance compilation visual-studio-2010

1491
推荐指数
5
解决办法
14万
查看次数

'const'双重复制+比较安全吗?

我注意到有很多关于浮点计算错误主题的讨论,要求你使用比复杂的更复杂的比较==.然而,所有这些文章似乎都假设值以某种方式被操纵(或双重计算),而我没有看到一个涵盖非常简单的常量复制的示例.

请考虑以下事项:

const double magical_value = -10;

class Test
{
    double _val;

public:
    Test()
        : _val(magical_value)
    {
    }

    bool is_special()
    {
        return _val == magical_value;
    }
};
Run Code Online (Sandbox Code Playgroud)

据我所知,magical_value应该在编译时设置,以便在该点进行所有舍入.之后,应该将值复制到类中,并与原始值进行比较.这样的比较是否保证安全?或者可以复制或比较在这里引入错误?

请不要建议替代比较或魔法价值使用方法,这是另一个主题.我只是对这个假设感到好奇.

编辑:请注意,我有点担心在某些体系结构上,优化可能会导致将值复制到不同大小的浮点寄存器,从而引入精确值的差异.有类似的风险吗?

c++ floating-point

10
推荐指数
1
解决办法
309
查看次数