[英]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.