000
18.06.2003, 11:10 Uhr
~Davood
Gast
|
Hallo C++ Experten! in meinem Programm berechne ich eine Summierung und diese Summirung muss null werden. Aber der Code in C++ gibt einen sehr groben Wert (grob für mich) und zwar 6.50521E-19. Ich habe den Code mit Visaul C++ kompiliert. Das kann aber nicht sein so ein round-off error. Das probelm hatte ich nie in Fortran. Hier unten ist der sehr einfache Code, der die selbe Berechnungen macht: (wenn man diese Berechungen z.B. in Excell ausführt, kommt genau 0.0 als Endwert raus!!!!) Ist es ein algemeines Problem oder muss ich in Compiler eine Option einschalten??? Ich hoffe, dass jemand mir helfen kann!
#include <stdio.h> #include <iostream.h> #include <string.h> #include <fstream.h>
double gravty = 9.80933; double x1,x2,x3; double y1,y2,y3; double z1,z2,z3;
double h1,h2,h3;
double wse, dt, A, slopX; double bedSlope1, bedSlope2, bedSlope3; double pressurX1, pressurX2, pressurX3; double ResVx = 0.0;
void main() { x1 = 6.25e+1, x2 = 6.25e+1, x3 = 6.49999976e+1; y1 = 1.40000001e+1, y2 = 1.20000005e+1, y3 = 1.20000005e+1; z1 = 0.0, z2 = 0.0, z3 = 5.0e-1;
wse = 0.8; dt = 0.001;
h1 = wse - z1; h2 = wse - z2; h3 = wse - z3;
A = 0.5 * ((x2*y3-x3*y2)+(x3*y1-x1*y3)+(x1*y2-x2*y1)); slopX = 0.5 / A *(z1*(y2-y3)+z2*(y3-y1)+z3*(y1-y2));
bedSlope1 = gravty * 0.5 * (h1 + h2) / 3.0; bedSlope2 = gravty * 0.5 * (h2 + h3) / 3.0; bedSlope3 = gravty * 0.5 * (h3 + h1) / 3.0;
pressurX1 = 0.5 * gravty * 1./3. * (h1 * h1 + h2 * h2 + h1 *h2) *(y1 - y2); pressurX2 = 0.5 * gravty * 1./3. * (h2 * h2 + h3 * h3 + h2 *h3) *(y3 - y2); pressurX3 = 0.5 * gravty * 1./3. * (h3 * h3 + h1 * h1 + h3 *h1) *(y1 - y3);
printf(" h1 = %15.12f , h2 = %15.12f , h3 = %15.12f \n", h1,h2,h3); printf(" A = %15.12f , slopX = %15.12f \n", A,slopX); printf(" bedSlope1 = %15.12f , bedSlope2 = %15.12f , bedSlope3 = %15.12f \n", bedSlope1, bedSlope2, bedSlope3); printf(" pressurX1 = %15.12f , pressurX2 = %15.12f , pressurX3 = %15.12f \n", pressurX1, pressurX2, pressurX3);
ResVx -= dt * slopX * bedSlope1; ResVx += dt * pressurX1 / A; printf(" ResVx = %15.12e \n", ResVx);
ResVx -= dt * slopX * bedSlope2; ResVx -= dt * pressurX2 / A; printf(" ResVx = %15.12e \n", ResVx);
ResVx -= dt * slopX * bedSlope3; ResVx -= dt * pressurX3 / A; printf(" ResVx = %15.12e \n", ResVx); } |