<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
<br>
<font face="arial" size="2">G'day everyone<br>
<br>
Context:<br>
&nbsp;&nbsp;&nbsp; gmp-static-vc-4.1.2<br>
&nbsp;&nbsp;&nbsp; Microsoft Visual C++ 6.0 <br>
&nbsp;&nbsp;&nbsp; Windows XP Professional SP3<br>
<br>
In the code below I use mpf_add in what I assume to be the canonical
way. What I don't understand at this point is why 2.2 + 3.2 =
5.39999999999999999999999999999999999999. I would have thought that<br>
gmp was smart enough to give 5.4.<br>
<br>
What else should I be seeing in the manual that I'm not?<br>
<br>
Kind regards,<br>
<br>
Bruce M. Axtens<br>
Software Engineer<br>
The Protium Project<br>
<br>
---<br>
<br>
#define F(x) mpf_t x; mpf_init( x );<br>
<br>
BSTR __stdcall FBIGSUM(BSTR p1, BSTR p2 ) {<br>
&nbsp;&nbsp;&nbsp; USES_CONVERSION;<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; F(n1);<br>
&nbsp;&nbsp;&nbsp; F(n2);<br>
&nbsp;&nbsp;&nbsp; F(res);<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; LPSTR sNum1 = W2A( p1 );<br>
&nbsp;&nbsp;&nbsp; LPSTR sNum2 = W2A( p2 );<br>
<br>
&nbsp;&nbsp;&nbsp; mpf_set_str( n1, sNum1, 10 );<br>
&nbsp;&nbsp;&nbsp; mpf_set_str( n2, sNum2, 10 );<br>
<br>
&nbsp;&nbsp;&nbsp; mpf_add( res, n1, n2 );<br>
<br>
&nbsp;&nbsp;&nbsp; char * buff =&nbsp; (char *) _alloca( 1024 );<br>
&nbsp;&nbsp;&nbsp; char expBuffer[ 20 ];<br>
&nbsp;&nbsp;&nbsp; mp_exp_t exp;<br>
<br>
&nbsp;&nbsp;&nbsp; mpf_get_str(buff, &amp;exp, 10, 0, res);<br>
<br>
&nbsp;&nbsp;&nbsp; char * temp = ltoa( (long) exp, expBuffer, 10 );<br>
&nbsp;&nbsp;&nbsp; if (exp &gt;= 0) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; strcat(buff, "+" );<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; strcat(buff, expBuffer );<br>
<br>
&nbsp;&nbsp;&nbsp; BSTR bResult = _com_util::ConvertStringToBSTR( buff );<br>
&nbsp;&nbsp;&nbsp; return bResult;<br>
}<br>
<br>
</font>
<br>
<br>
</body>
</html>