小编szp*_*zyk的帖子

在C++中返回成员类

在以下示例中:

class A
{
public:
    class B
    {
        ...
    }
    B Method(B argument);
}

A::B A::Method(B argument);
Run Code Online (Sandbox Code Playgroud)

为什么返回类型需要范围,而不是参数类型?

c++ types

7
推荐指数
1
解决办法
153
查看次数

比较C或C++中两个浮点值的总和

假设您有两组根据IEEE754实现的浮点变量,意味着将其视为根据标准中的公式计算的精确值.所有合法价值都是可能的.集合中的变量数量可以是任何自然数.

在数学意义上,比较精确的,由所述变量表示的值的总和是什么是好的方法.由于域的性质,问题可以很容易地表示为将单个总和与零进行比较.您可以忽略存在NaN或Infinities的可能性,因为它与核心问题无关.(可以轻松独立地检查这些值,并以适合此问题的特定应用的方式采取行动.)

一种天真的方法是简单地求和和比较,或者将一组的值和另一组的值相加.

    bool compare(const std::vector<float>& lhs, const std::vector<float>& rhs)
    {
        float lSum = 0.0f;
        for (auto value : lhs)
        {
            lSum += value;
        }
        float rSum = 0.0f;
        for (auto value : rhs)
        {
            rSum += value;
        }

        return lSum < rSum;
    }
Run Code Online (Sandbox Code Playgroud)

很明显,在关于浮点运算的各种其他问题中提到的天真方法存在问题.大多数问题都与两个困难有关:

  • 浮点值的相加结果根据顺序而不同
  • 添加某些值集的某些顺序可能导致中间溢出(计算的中间结果超出可用数据类型支持的范围)

    float small = strtof("0x1.0p-126", NULL);
    float big = strtof("0x1.8p126", NULL);
    
    std::cout << std::hexfloat << small + big - big << std::endl;
    std::cout << std::hexfloat << (big-2*small) + (big-small) + big - (big+small) - …
    Run Code Online (Sandbox Code Playgroud)

c c++ floating-point rounding-error overflow

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

如何让 gvim 保持终端直到它结束?

我正在尝试使用 gvim 查找和替换文件层次结构,如下所示:

  find . | xargs grep -l pattern | xargs -n 1 gvim -c "%s/pattern/replacement/gc" -c "wq"
Run Code Online (Sandbox Code Playgroud)

我可能会尝试在没有 n 标志的情况下使其正常工作,但理论上我可以拥有许多匹配的文件。现在发生的是 gvim 从终端分离,所以 xargs 一个接一个地启动 gvim 的所有实例,几乎没有延迟。如果我可以强制 gvim 保持终端,xargs 将等待 gvim 完成,因此将永远只有一个 gvim 实例在运行。

不幸的是,我无法在与之相关的环境中使用 vim。我从一位同事那里获得了 gvim 的工作二进制文件,但他们没有 vim 二进制文件,我自己编译 vim 失败,暂时放弃了。

vim find xargs

0
推荐指数
1
解决办法
473
查看次数

标签 统计

c++ ×2

c ×1

find ×1

floating-point ×1

overflow ×1

rounding-error ×1

types ×1

vim ×1

xargs ×1