所以,我正在寫一個相對簡單的腳本來採取積分的梯形近似。我已經很容易地返回結果,但給出了錯誤的答案。雖然我的許多預處理器定義在任何地方都開始將零錯誤排除,但需要排除故障。定義替換爲0
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <cmath>
#define PI 3.141592
#define SLICES 25
#define FORMULA sqrt(1+sinh(x)*sinh(x))
#define DELTA_X (UPPERBOUND-LOWERBOUND)/SLICES
#define LOWERBOUND 0
#define UPPERBOUND 3
using namespace std;
int i=0;
double x;
double y[SLICES];
double length=0;
int main() {
x=LOWERBOUND;
cout << DELTA_X << endl;
while(i<SLICES+1) { //Preparing y values to calculate in next FOR loop
y[i] = FORMULA;
i++;
x+=(DELTA_X);
cout << "x" << i << " is " << x << endl;
}
for(i=0;i<SLICES;i++) {
double s = (DELTA_X)*(y[i]+y[i+1])/2;
length+=s;
cout << "Length" << i+1 << " is " << s << endl;
}
cout << "The approximate integral sliced " << SLICES << " times is: " << length << endl;
return 0;
}
輸出基本上顯示打印時的所有x值,長度值和DELTA_X爲0。當我突然開始打印0時,我改變了公式和其他一些小東西,所以我試圖改回它,但沒有運氣。我最初認爲這是因爲我試圖「嵌套」定義語句(即使它正在工作),所以我試圖用標準整數替換它們。同樣的結果。任何線索我在做什麼。
嘗試用常量和函數替換您的宏。 – Anthony
我的猜測是編譯器將你的宏中的值解釋爲整數。嘗試替換0到0.0,3到3.0和25到25.0 –