| | |
Need Help Fast!!!
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Oct 2007
Posts: 2
Reputation:
Solved Threads: 0
Need to figure out what is going wrong with my source code. When I imput the values of 72, 69, and 2.8 respectively I should output pdf=0.85801, however I am not getting that value. I don't know why. I am doing the adaptive simpsons method to find the probability density of data under a normal curve. I believe that I might have the "approx" in the wrong spot, or I'm not calling my functions correctly. This like will take you to a PDF of what I am trying to do, I'm totally lost at this point.
http://ezekiel.vancouver.wsu.edu/~cs...ts/pdf/pdf.pdf
Thanks
http://ezekiel.vancouver.wsu.edu/~cs...ts/pdf/pdf.pdf
C++ Syntax (Toggle Plain Text)
#include<stdio.h> #include<stdlib.h> #include<math.h> double INV_SQRT_2PI= 0.39894228; /*1/sqrt(2*pi)*/ double a, b, u, U, O, c, left, right, d, approx, x; double epsilon= 0.0000001; /*epsilon defined as 0.0000001*/ double f(double x); /*prototype functions*/ double S(double a, double b); double asimpson(double a, double b, double approx, double epsilon); int main(void) { printf("Enter x Value: "); scanf("%lf", &x); printf("Enter Mean: "); scanf("%lf", &U); printf("Enter Standard Deviation: "); scanf("%lf", &O); double pdf, u; u=((x-U)/O); pdf=((1/2)+INV_SQRT_2PI * asimpson(0,u,S(0,u),epsilon)); printf("pdf= %f",pdf); return 0; } double f(double x) { return (exp(double(x*x*(-1))/2)); } double S(double a,double b) { return ((b-a)/6)*(f(a)+(4*f((a+b)/2))+f(b)); } double asimpson(double a,double b,double approx, double epsilon) { approx= S(a,b); c=((a+b)/2); left=S(a,c); right=S(c,b); d=((left+right-approx)/15); if(abs(d)<=epsilon) return (left+right+d); return (asimpson(a,c,left,epsilon/2)+asimpson(c,b,right,epsilon/2)); }
Thanks
Looks like it is a precision problem.
This is actually one of the most insidious problems people learning C/C++ get.
The problem is one of type.
1/2 is integer
1/2.0 is floating point
So, for example, when you go to calculate the PDF you say
That one-half there is an integer expression, which gets promoted to double after it is evaluated. Hence, 1 idiv 2 is 0, promoted to double is 0.0, + INV_SQRT_2PI etc..
All the places where you have something like
Hope this helps.
The problem is one of type.
1/2 is integer
1/2.0 is floating point
So, for example, when you go to calculate the PDF you say
pdf=((1/2)+INV_SQRT_2PI * ...That one-half there is an integer expression, which gets promoted to double after it is evaluated. Hence, 1 idiv 2 is 0, promoted to double is 0.0, + INV_SQRT_2PI etc..
All the places where you have something like
/2 check to make sure your numerator is a double before division occurs. If it isn't, change your denominator to a double (say, /2.0).Hope this helps.
Or, more generally, make sure at least one of the values being divided is a floating point value.
The 3 Laws of the Procrastination Society:
1) Never do today that which can be put off until tomorrow
2) Tomorrow never comes
1) Never do today that which can be put off until tomorrow
2) Tomorrow never comes
![]() |
Similar Threads
- Music plays too fast on Win2000 (Windows NT / 2000 / XP)
- Get Fast Access to System Settings (Windows tips 'n' tweaks)
- PHP 5 fast&easy web development (PHP)
- Fast User Switching (Windows tips 'n' tweaks)
- Slow Boot, Fast System (Windows NT / 2000 / XP)
- AGP fast write (Monitors, Displays and Video Cards)
Other Threads in the C++ Forum
- Previous Thread: I'm back...More problems, different program
- Next Thread: Please Help Dynamic Memory Allocation.
| Thread Tools | Search this Thread |
add api array arrays beginner binary bitmap c++ c/c++ calculator char class classes code coding compile compiler console conversion convert count data database delete desktop developer directshow dll email encryption error file forms fstream function functions game generator getline google graph homeworkhelper iamthwee ifstream image input int integer java lib linkedlist linux loop looping loops map math matrix memory multidimensional multiple newbie news node number output parameter pointer problem program programming project proxy python random read recursion recursive return string strings struct studio template templates text tree unix url variable vector video visual visualstudio win32 windows winsock word wordfrequency wxwidgets






