簡體   English   中英

C ++復數,什么是正確的格式?

[英]C++ complex numbers, what is the right format?

我想使用復雜數字的C ++。 因此我加入了#include <complex> 現在我的問題是:我如何聲明一個變量?(那么調用的格式是什么,讓我們說: 1 + i ?)

提前致謝 :-)

// 1 + 2i
std::complex<double> c(1, 2);

std::complex的構造函數有兩個參數:

  • 第一個,這個數字的真實部分。
  • 第二個,具有數字的虛部。

例如:

std::complex<float> my_complex(1,1); //1 + 1i 

此外,C ++ 11引入了用戶定義的文字 ,它允許我們實現(或由標准庫實現,如在此C ++ 14接受的提議中 )一個易於使用的復數的文字:

constexpr std::complex<float> operator"" i(float d)
{
    return std::complex<float>{0.0L,static_cast<float>( d )};
}

你可以使用如下:

auto my_complex = 1i; // 0 + 1i

嘗試這個:

#include <complex>
#include <iostream>
using namespace std;
int main()
{
    complex<double> a = {1,2};
    complex<double> b(3,4);

    cout << a + b << "\n";
}

您可以通過指定模板參數並指定變量的名稱來定義變量,與大多數其他模板一樣:

std::complex<double> x(1, 1);

ctor的第一個參數是實部,第二個是虛部。

從C ++ 14開始,添加了一個用戶定義的文字運算符,因此您可以使用更自然的表示法初始化復雜變量:

using namespace std::literals;

std::complex<double> c = 1.2 + 3.4i;

在這種情況下,(顯然足夠) 1.2是實部, 3.4是虛部。

這是一個如何使用的例子。 它在QT下編譯和運行

#include <QCoreApplication>
#include<complex>
#include<iostream>

using namespace std;

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::complex<double> x=3.0-3.0i;
std::complex<double> y=2.0+4.0i;

cout.precision(3);
cout<<"x="<<x<<" y="<<y<<'\n';
cout<<" OR x real="<<real(x)<<" x imagine="<<imag(x)<<"\n\n";

complex<double> sum = x + y;
cout<<"The sum: x + y = "<<sum<<'\n';

complex<double> difference = x - y;
cout<<"The difference: x - y = "<<difference<<'\n';

complex<double> product = x * y;
cout<<"The product: XY = "<<product<<'\n';

complex<double> quotient = x / y;
cout<<"The quotient: x / y = "<<quotient<<'\n';

complex<double> conjugate = conj(x);
cout<<"The conjugate of x = "<<conjugate<<'\n';

complex<double> reciprocal = 1.0/x;
cout<<"The reciprocal of x = "<<reciprocal<<'\n';

complex<double> exponential =exp(x);
cout<<"The exponential  of x = "<<exponential<<'\n';

double magnitude=2.0,phase=45;
cout<<"magintude = "<<magnitude<<" phase = "<< phase<<" degrees\n";
complex<double> pol= std::polar(2.0,(M_PI/180.0)*phase);
cout<<"The polar: x , y = "<<pol<<'\n';

return a.exec();
}

暫無
暫無

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

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