<p dir="ltr">Thank you for your nice explanation 👍 </p>
<br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 27 Oct 2024, 3:41 am Richard B. Kreckel, <<a href="mailto:kreckel@in.terlu.de">kreckel@in.terlu.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
On 10/26/24 5:38 PM, Dr. Mithun Bairagi wrote:<br>
> Dear all ginac lovers, I have got some wrong results when performing <br>
> some simple computations using ginac.<br>
<br>
These results are not "wrong", see below.<br>
<br>
> I have compiled and run the following c++ program using ginac-1.8.7, <br>
> cln-1.3.7  (mingw64 compiler,  gcc version 14.2.0, windows 10 os),<br>
> <br>
> #include <ginac/ginac.h><br>
> <br>
> using namespace std;<br>
> using namespace GiNaC;<br>
> <br>
> int main()<br>
> {<br>
>      cout<<(numeric(0.1)+numeric(7))<<endl;<br>
>      cout<<(numeric("0.01")*numeric("9"))<<endl;<br>
>      cout<<(numeric("0.01")*numeric("99"))<<endl;<br>
> }<br>
> <br>
> the above program shows the following result:<br>
> 7.1000000000000000056<br>
> 0.089999999999999999996<br>
> 0.98999999999999999995<br>
> <br>
> I have got some unwanted digits which look very ugly. I think the result <br>
> should be<br>
> 7.1<br>
> 0.09<br>
> 0.99<br>
<br>
This result is to be expected. Remember that CLN and GiNaC (and many <br>
other systems) represent floating-point numbers in base 2, not in base 10.<br>
<br>
In such systems, each floating-point number is an exact rational number <br>
where the denominator happens to be a power of two.<br>
<br>
An exact decimal fraction (such as 7.1 = 71/10 in decimal notation) can <br>
be converted to an exact binary fraction if and only if the numerator is <br>
a power of 2.<br>
<br>
This is not the case for 71/10. On the other hand, it is the case for <br>
e.g 75/10 = 15/2, so 7.5 can be converted from string "7.5" to an <br>
internal representation exactly.<br>
<br>
As an alternative, maybe you can use rational numbers such as 71/10 <br>
throughout your computations? Apart from that, there is no solution to <br>
what you perceive as a "problem".<br>
<br>
Mankind made a big mistake settling for base 10 millennia ago.<br>
<br>
    -richy.<br>
_______________________________________________<br>
GiNaC-list mailing list<br>
<a href="mailto:GiNaC-list@ginac.de" target="_blank" rel="noreferrer">GiNaC-list@ginac.de</a><br>
<a href="https://www.ginac.de/mailman/listinfo/ginac-list" rel="noreferrer noreferrer" target="_blank">https://www.ginac.de/mailman/listinfo/ginac-list</a><br>
</blockquote></div>