如果我想添加功能来计算绝对/相对误差两倍,该怎么办?我是否可以简单地实现MyDouble类,该类涵盖所有double函数并且可以执行此特定操作,然后用此类型“替换” double?

(我想这样使用它:

  • 通常使用 double 类型
  • 编写一些代码
  • 在文件的开头添加一些头文件或编写类似typedef double MyDouble
  • 的文件
  • 估计 double 值错误,累积在我的代码
  • 删除我在第2点上放入文件的内容
  • 最佳答案

    typedef不足以拥有您自己的类。如果您需要积累错误,重载某些操作或定义其他成员,则肯定需要一个成员来保存它们,并且还需要重载操作以定义错误传播规则。

    这是一个开始:

    class MyCDouble {
        double d;
    public:
        MyCDouble(double x) : d(x) {}
        operator double() const { return d; }
        void analyze() {};
    };
    

    多亏了转换运算符和构造函数,您可以像使用double一样使用此类。例如:
    MyCDouble d = 3.14;
    MyCDouble e = sqrt(d);
    e.analyze();
    cout << "sqrt of "<<d<<" is "<< e<<endl;
    e = (d + 5)/3;
    

    现在,由您决定添加错误管理并超载所需的内容。例如,您可以添加一个私有(private)成员double error;,并重载传播错误的操作。例如,您可以在该类中添加:
     MyCDouble operator+ (MyCDouble x) {
         MyCDouble r = d+x;
         r.error = max(r.error, x.error);
         return r;
     }
    

    10-08 13:32