如何在C ++中设置复数的精度

时间:2016-09-08 13:20:36

标签: c++

我有以下代码,我需要添加两个复数。公式正在运作,但是,我无法摆脱科学记数法。我是C ++的新手,不知道如何使用setPrecision。

我的代码在.hpp:

    class ComplexNumber
    {
    public:

//--constructors
    ComplexNumber();
    ComplexNumber(double r, double i);
    ComplexNumber(const ComplexNumber &cn);

    void print();
    ComplexNumber add(const ComplexNumber &rhs);
    private:
        double re, im;
    };

我在.cpp文件中的代码

//--constructors
ComplexNumber::ComplexNumber()
{

}
ComplexNumber::ComplexNumber(double r, double i)
{

}
ComplexNumber::ComplexNumber(const ComplexNumber &cn)
{

}    

void ComplexNumber::print()
    {
        std::cout << this->re << " + " << this->im << "i" << std::endl;
    }

    ComplexNumber ComplexNumber::add(const ComplexNumber &rhs)
    {
        return ComplexNumber(this-> re + rhs.re, this->im + rhs.im);
    }

我的主要人物:

int main(int argc, const char * argv[]) {
    ComplexNumber a(1,2);
    ComplexNumber b(3,4);
    ComplexNumber c;

    c = a.add(b);
    c.print();
    return 0;
}

输出: 4.94066e-324 + 6.95322e-310i

它应该是4 + 6i

3 个答案:

答案 0 :(得分:2)

你的构造函数实际上都没有任何东西。这意味着成员变量将是未初始化的,它们的值将是不确定的,使用它们将导致未定义的行为

您需要实际初始化构造函数中的成员。

答案 1 :(得分:2)

在修复语法(使其成为聚合)后按预期工作:

#include <iostream>

struct ComplexNumber
{
    void print();
    ComplexNumber add(const ComplexNumber &rhs);
    double re, im;
};

void ComplexNumber::print()
{
    std::cout << this->re << " + " << this->im << "i" << std::endl;
}

ComplexNumber ComplexNumber::add(const ComplexNumber &rhs)
{
    return ComplexNumber{this-> re + rhs.re, this->im + rhs.im};
}

int main(int argc, const char * argv[]) {
    ComplexNumber a{1,2};
    ComplexNumber b{3,4};
    ComplexNumber c;

    c = a.add(b);
    c.print();
    return 0;
}

答案 2 :(得分:1)

精确度

这个问题。

您的双参数构造函数需要按如下方式实现

ComplexNumber::ComplexNumber(double r, double i) : re(r), im(i)
{
}

否则,班级成员未初始化

读取未初始化的变量是C ++中未定义的行为;你的输出就是一种表现形式。

在风格上可以接受(在我看来,首选为数字级别)

ComplexNumber() = default;

用于默认构造函数;如果你希望它保持类成员未初始化,就像C ++内置类型的情况一样。在将成员变量分配给某些变量之前,不要读取成员变量。

最后,依靠编译器为你生成复制构造函数:没有必要自己构建。