C++ 在c++;
嗨,我得到了错误的预期结果,我想这是对std::complex的结果,这是我应该得到的结果,如果你运行下面的代码,这是我得到的结果,基本上一切都是NAN,我哪里出错了C++ 在c++;,c++,complex-numbers,C++,Complex Numbers,嗨,我得到了错误的预期结果,我想这是对std::complex的结果,这是我应该得到的结果,如果你运行下面的代码,这是我得到的结果,基本上一切都是NAN,我哪里出错了 #include<cmath> #include<complex> #include<new> #include<iostream> int sign(double x){ if(x > 0) { return 1;
#include<cmath>
#include<complex>
#include<new>
#include<iostream>
int sign(double x){
if(x > 0) {
return 1;
}
else if(x < 0) {
return -1;
}
else {
return 0;
}
}
int main(){
double alpha = 1.8;
double beta = .35;
double sigma = 1;
double mu = 0.5;
double PI = 3.1416;
int N = 8192;
double h = 0.01;
std::complex<double>phi[N];
double* in_t2= new double[N];
double* abs_t = new double [N];
double* sign_t = new double [N];
std::complex<double> I(0,1);
double s = 0.01;
s = 1/(h*N);
std::cout<<s;
for (int i=1; i<=N; i++) {
in_t2[i-1] = 2*PI * (i - 1 - N/2)*s; // x1
}
for (int i = 0; i < N; i++){
abs_t[i] = std::abs(in_t2[i]);
}
for (int i = 0; i < N; i++){
sign_t[i] = sign(in_t2[i]);
}
for (int i = 0; i < N; i++){
//where i suspect the error is..
phi[i] = pow(abs_t[i],sign_t[i]);
}
for ( int i = 0; i< N; i++){
if (in_t2[i] == 0){
phi[i] = 0;
}
phi[i] = std::exp(phi[i]);
}
return 0;
}
#包括
#包括
#包括
#包括
整数符号(双x){
如果(x>0){
返回1;
}
else如果(x<0){
返回-1;
}
否则{
返回0;
}
}
int main(){
双α=1.8;
双贝塔=0.35;
双西格玛=1;
双μ=0.5;
双PI=3.1416;
int N=8192;
双h=0.01;
std::complexphi[N];
双精度*in_t2=新双精度[N];
双精度*abs_t=新双精度[N];
双精度*符号t=新双精度[N];
配合物Ⅰ(0,1);
双s=0.01;
s=1/(h*N);
std::cout此处调用的pow
函数
pow((-1.0*abs_t[i]), alpha)
是用于double
参数和结果的函数,它返回一个NaN作为负基数。此处调用的pow
函数
pow((-1.0*abs_t[i]), alpha)
是用于双参数和结果的参数,它返回负基数的NaN。std::pow
将返回传递给它的相同类型
如果需要从std::pow()
返回std::complex
,则必须将std::complex
传递给函数
您可以通过铸造任何表达式轻松解决此问题
pow( expression )
致:
std::pow
将返回传递给它的相同类型
如果需要从std::pow()
返回std::complex
,则必须将std::complex
传递给函数
您可以通过铸造任何表达式轻松解决此问题
pow( expression )
致: