您好我正在关注我在网上找到的教程和视频,我试图制作一个模板来预先形成一个函数的数值集成,用户可以决定执行哪种形式的集成,我试图将它保存到一个文件由于不使用标题而不使用大量的循环,第一次集成的代码本身工作正常,但是当我通过模板运行时,我得到错误的答案和相同的值1.9147e-307为每个输入什么是我做错了吗?
#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include<conio.h>
using namespace std;
//declared function
double F(double X)
{
double f;
f = (X*X);
return f;
};
double unifRand()
{
return rand() / double(RAND_MAX);
};
template<typename T> class INTG{
private:
T a;
T b;
T n;
public:
INTG(T a, T b,T n){
INTG::a = a;
INTG::b = b;
}
~INTG(){}
T MC() {
// some code
return ans;}
T SIMPC(){ // Simpson integration code here
return a+b+n;
}
};
int main() {
double a,b,mc,simp,ans;
int OP,n;
cout<<"Enter 1 for Monte Carlo Integration , Enter 2 for Composite Simpson Integration, enter 3 for trapezoidal int...."<<endl;
cin>>OP;
clock_t start = clock();
if (OP == 1) {
cout<<"Enter lower limit of integration"<<endl;
cin>>a;
cout<<"Enter upper limit of integration"<<endl;
cin>>b;
cout<<"Enter number of iterations"<<endl;
cin>>n;
ans = INTG<double>::MC(a, b, n);
INTG<double> MyCalc(a,b,n);
cout<< ans <<endl;
//mc = INTG::MC(a, b, n);
getch();
}
}
答案 0 :(得分:5)
ans
分配值。这将占你的1.9147e-307。
你打算
吗?ans = MyCalc.MC();
在cout
之前?
另外
INTG(T a, T b,T n){
INTG::a = a;
INTG::b = b;
}
更好地描述为
INTG(T a, T b, T n):a(a),b(b),n(n) {}
初始化而不是分配和记住n。
所以计算顺序是
INTG<double> MyCalc(a,b,n);
ans = MyCalc.MC();
答案 1 :(得分:2)
if (OP = 1) {
......应该......
if (OP == 1) {