簡體   English   中英

如何在C ++中設置復數的精度

[英]How to set precision for complex numbers in 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

您的構造函數實際上沒有任何事情。 這意味着成員變量將是未初始化的,其值將是不確定的,使用它們將導致未定義的行為

您實際上需要初始化構造函數中的成員。

修復語法(使其成為匯總)后,按預期工作:

#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;
}

精度 不是這里的問題。

您的兩個參數構造函數需要實現如下

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

否則,班級成員保持未初始化狀態

在C ++中,讀取未初始化的變量是未定義的行為。 您的輸出就是這種體現。

在風格上是可以接受的(我認為數字類更可取 )是

ComplexNumber() = default;

為您的默認構造函數; 如果您希望它使類成員保持未初始化狀態,例如C ++內置類型。 只是在將成員變量分配給某物之前不閱讀它們。

最后,依靠編譯器為您生成副本構造函數:無需構建自己的副本構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM