如何在C++中有效地实现无穷大和无穷大支持算法?

Mar*_*dik 2 c++ math

琐碎的解决方案是:

class Number
{
public: 
    bool isFinite();
    bool isPositive();
    double value();

    ...

private:
    double value_;
    bool isFinite_;
    bool isPositive_;

    ...
};
Run Code Online (Sandbox Code Playgroud)

让我担心的是效率:

从Effective C++:55改进程序和设计的具体方法(第3版)作者:Scott Meyers:

即使小对象具有廉价的拷贝构造器,也可能存在性能问题.有些编译器会以不同的方式处理内置和用户定义的类型,即使它们具有相同的底层表示.例如,一些编译器拒绝将仅由双精度组成的对象放入寄存器中,即使他们乐意定期将裸露的双精度放在那里.当发生这种情况时,你最好通过引用传递这些对象,因为编译器肯定会将指针(引用的实现)放入寄存器中.

有没有办法绕过效率问题?例如,使用某种汇编语言魔法的库?

Sor*_*ren 6

没有理由为double实现Number类.double格式已经将Infinity,NaN和signage实现为raw basic double类型的一部分.

其次,您应首先编写代码以确保正确性,然后再尝试优化,此时您可以查看特定数据结构的因素并重写代码和算法.

现代编译器在编写优秀代码时通常非常有效,并且通常比大多数人类程序员做得更好.