
I have been trying to compile code that uses the erfc function. I can get it to build successfully using DevC++4.9.9.2, but cannot using Win-Visual C++2005 Express (C90 standard) which I have been using to construct a form for input-output. I have downloaded the boost libraries and have changed the configuration properties to include the boost directory and changed to Not Using Precompiled Headers. I continue to receive the following: 'erfc': identifier not found. I have tried adding the libraies for DevC++4.9.9.2 but receive the same error. I am new to C++ and this a small simple program but am spending a significant amount of time getting the erfc issue resolved. Any help would be very appreciated. Thank you. Gary

Gary.Stevens@deq.idaho.gov wrote:
I have been trying to compile code that uses the erfc function. I can get it to build successfully using DevC++4.9.9.2, but cannot using Win-Visual C++2005 Express (C90 standard) which I have been using to construct a form for input-output. I have downloaded the boost libraries and have changed the configuration properties to include the boost directory and changed to Not Using Precompiled Headers. I continue to receive the following: 'erfc': identifier not found. I have tried adding the libraies for DevC++4.9.9.2 but receive the same error. I am new to C++ and this a small simple program but am spending a significant amount of time getting the erfc issue resolved. Any help would be very appreciated. Thank you.
We would need to see the sample code to understand what you're doing wrong, but are you including <boost/math/special_functions/erf.hpp> ? HTH, John.

I did add the include statement. Please find attached the sample code. Thank you. #include <iostream> #include <math.h> #include <stdlib.h> #include <boost/math/special_functions/erf.hpp> using namespace std; int main() { // declare input and calculated variables float C; float W; float H; float V; float Y1; float Y2; float Z1; float Z2; float DX; float DY; float DZ; float DK; float X; float Y; float Z; float T; float Max; float CN; long double ETA; long double PN; long double OM; long double LM; long double ZETA; long double ALPHA; long double BETA; long double BETAT; long double COSSZ; long double COSRY; long double RTDXT; long double A1; long double B1; long double A2; long double B2; long double C1; long double C2; long double TERM1; long double SIGMAN; long double SIGMAM; long double SUBTN; const double PI = 3.14159265358979; // Concentrations are specified for boundary conditions if (Y==0 && Y == Y1 || Y == Y2) { if (Z > Z1 && Z < Z2) CN = 0.50; else (Z == Z1 || Z == Z2); CN = 0.25; } else; if (Z == Z1 || Z == Z2) { if (Y > Y1 && Y < Y2) CN = 0.50; else ; } else; if (Y > Y1 && Y < Y2 && Z >Z1 && Z<Z2) CN = 1.0; else; // Begin summation of infinite outer series SIGMAM = 0; for (int x = 0; x <= Max; x++ ) { ZETA = x*PI/H; if (x==0) OM = (Z2-Z1)/H; else OM = (sin(ZETA*Z2)-sin(ZETA*Z1))/(x*PI); COSSZ=cos(ZETA*Z); // Begin summation of infinite inner series SIGMAN = 0; SUBTN = 0; for (int y = 0; y <= Max; y++ ) { ETA = y*PI/W; if (y==0) PN = (Y2-Y1)/W; else PN = (sin(ETA*Y2)-sin(ETA*Y1))/(y*PI); COSRY=cos(ETA*Y); ALPHA = 4.0*DX*(ETA*ETA*DY+ZETA*ZETA*DZ+DK); BETA = sqrt(V*V+ALPHA); BETAT=BETA*T; RTDXT=2.0*sqrt(DX*T); //Compute TERM1 and SIGMAN A1 = exp(X*(V-BETA)/(2.0*DX)); B1 =erfc((X-BETAT)/RTDXT); A2= exp(X*(V+BETA)/(2.0*DX)); B2=erfc((X+BETAT)/RTDXT); TERM1 = COSRY*PN*((A1*B1)+(A2*B2)); if ((x==0) && (y==0)) TERM1 = TERM1*0.5; else if((x>0) && (y>0)) TERM1 = TERM1*2; else TERM1 = TERM1; SIGMAN = SIGMAN+TERM1; // Check for convergence of inner series due to oscillations // Check subtotal of last 10 terms { if(y % 10 != 0) continue; { if (fabs(SUBTN) < 1.0E-12) goto leave_innerloop; } SUBTN = 0.0; } // End of infinite inner series } leave_innerloop: SIGMAM=SIGMAM+SIGMAN*COSSZ*OM; // End of infinite outer series } } -----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of John Maddock Sent: Thursday, June 12, 2008 6:04 AM To: boost@lists.boost.org Subject: Re: [boost] erfc id not found Gary.Stevens@deq.idaho.gov wrote:
I have been trying to compile code that uses the erfc function. I can get it to build successfully using DevC++4.9.9.2, but cannot using Win-Visual C++2005 Express (C90 standard) which I have been using to construct a form for input-output. I have downloaded the boost libraries and have changed the configuration properties to include the boost directory and changed to Not Using Precompiled Headers. I continue to receive the following: 'erfc': identifier not found. I have tried adding the libraies for DevC++4.9.9.2 but receive the same error. I am new to C++ and this a small simple program but am spending a significant amount of time getting the erfc issue resolved. Any help would be very appreciated. Thank you.
We would need to see the sample code to understand what you're doing wrong, but are you including <boost/math/special_functions/erf.hpp> ? HTH, John. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Gary.Stevens@deq.idaho.gov wrote:
I did add the include statement. Please find attached the sample code. Thank you.
The Boost versions of all the special functions are declared in namespace boost::math::, so either call boost::math::erfc(val) or add a "using boost::math::erfc;" statement to bring the function into the current scope. The latter is probably not recomended in this case as you may get ambiguities between ::erfc declared in *some* but not all math.h versions, and boost::math::erfc. HTH, John.

The program compiled! Thank you for info and the work everyone is doing with Boost. Gary -----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of John Maddock Sent: Thursday, June 12, 2008 8:49 AM To: boost@lists.boost.org Subject: Re: [boost] erfc id not found Gary.Stevens@deq.idaho.gov wrote:
I did add the include statement. Please find attached the sample code. Thank you.
The Boost versions of all the special functions are declared in namespace boost::math::, so either call boost::math::erfc(val) or add a "using boost::math::erfc;" statement to bring the function into the current scope. The latter is probably not recomended in this case as you may get ambiguities between ::erfc declared in *some* but not all math.h versions, and boost::math::erfc. HTH, John. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
participants (2)
-
Gary.Stevens@deq.idaho.gov
-
John Maddock