C++ Double - 8th point decimals

Please support our C++ advertiser: Intel Parallel Studio Home
Thread Solved

Join Date: Oct 2006
Posts: 3
Reputation: ShawnMuller is an unknown quantity at this point 
Solved Threads: 0
ShawnMuller ShawnMuller is offline Offline
Newbie Poster

C++ Double - 8th point decimals

 
0
  #1
May 29th, 2007
Hi,

I have a problem that happens very rarely. I have a calculation which ads (for example) -15000.00 to 15575.51 and saves the results to an oracle database. However, the reslut in the databse is 575.51000002

Both figures are loaded elsewhere from the database and either have 0 or 2 decimals as in the example above.

The code processes millions of transactions, but less than .01 % has this error. Any ideas?

Thanks,
Shawn

AddUpInputAK(
int iIndexInputAK,
int iAccumPos,
int iAccumNeg,
double* naSumsBW,
double* naSumsRW )
{
int iRet = SQC_C_Success; int iIndexSum; double nBetragBook; double nBetragBest; double nBetragKto; double nBetragRef; int iAK_Vorz; //// // //// if ( ALG_IsIntNull( iIndexInputAK ) ) {
goto L_Eof;
} if ( ALG_IsIntNull( iAccumPos ) && ALG_IsIntNull( iAccumNeg ) ) {
goto L_Eof;
} iIndexSum = 0; nBetragBook = m_naInpAbrKompBetrag[iIndexInputAK]; if ( ALG_IsDoubleNull( nBetragBook ) ) {
goto L_Eof;
} //// // Correct signage //// iAK_Vorz = 1; if ( m_saInpAbrKompVorz[iIndexInputAK].Left( 1 ) == "-" ) {
iAK_Vorz = -1; nBetragBook = nBetragBook * ( -1.0);
} if ( m_sPosArt == "KTO" ) { //// // Accounts //// if ( m_sKtoWhg == m_saInpAbrKompWhg[iIndexInputAK] ) {
nBetragKto = m_naInpAbrKompBetrag[iIndexInputAK];
if ( iAK_Vorz < 0 ) {
nBetragKto = nBetragKto * ( -1 );
} else {
nBetragKto = nBetragBook;
} ALG_SetDoubleNull( &nBetragKto ); } if ( ! ALG_IsDoubleNull( nBetragKto ) ) {
naSumsBW[iIndexSum] = naSumsBW[iIndexSum] + nBetragKto;
} } L_Eof: return( iRet ); }
Reply With Quote Quick reply to this message  
Join Date: May 2006
Posts: 1,580
Reputation: Infarction has a spectacular aura about Infarction has a spectacular aura about Infarction has a spectacular aura about 
Solved Threads: 52
Infarction's Avatar
Infarction Infarction is offline Offline
Battle Programmer

Re: C++ Double - 8th point decimals

 
0
  #2
May 29th, 2007
I'd guess that it's due to how floating point values are stored imprecisely in memory, causing the weird results to come up on rare occasions.
Reply With Quote Quick reply to this message  
Join Date: Sep 2004
Posts: 7,625
Reputation: Narue has a reputation beyond repute Narue has a reputation beyond repute Narue has a reputation beyond repute Narue has a reputation beyond repute Narue has a reputation beyond repute Narue has a reputation beyond repute Narue has a reputation beyond repute Narue has a reputation beyond repute Narue has a reputation beyond repute Narue has a reputation beyond repute Narue has a reputation beyond repute 
Solved Threads: 715
Team Colleague
Narue's Avatar
Narue Narue is offline Offline
Code Goddess

Re: C++ Double - 8th point decimals

 
0
  #3
May 29th, 2007
>The code processes millions of transactions, but less than .01 % has this error. Any ideas?
That's a typical floating-point rounding fudge. If it's a serious enough problem, you can try to use a more precise type such as long double, or remove floating-point altogether to maintain exact precision. Though I suspect that an imprecision at the eighth decimal place isn't that much of an issue unless you're trying to do something with vanilla C++ types that shouldn't be done with vanilla C++ types. If that's the case, you really need to get a high precision mathematics library.
I'm here to prove you wrong.
Reply With Quote Quick reply to this message  
Join Date: Oct 2006
Posts: 3
Reputation: ShawnMuller is an unknown quantity at this point 
Solved Threads: 0
ShawnMuller ShawnMuller is offline Offline
Newbie Poster

Re: C++ Double - 8th point decimals

 
0
  #4
May 30th, 2007
Hi, thanks for all the replies.

The problem arises later on when external systems want to do a reconciliiation and then fails. This external system uses a language which generally does not have such problems and as such it hasn't been programmed to handle such differences.

Thanks again

Shawn
Reply With Quote Quick reply to this message  
Reply

This thread has been marked solved.
Perhaps start a new thread instead?
Message:


Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC