在以下示例中:
class A
{
public:
class B
{
...
}
B Method(B argument);
}
A::B A::Method(B argument);
Run Code Online (Sandbox Code Playgroud)
为什么返回类型需要范围,而不是参数类型?
假设您有两组根据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)我正在尝试使用 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 失败,暂时放弃了。