<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">2014-04-09 20:16 GMT+02:00 Nicolas Cellier <span dir="ltr"><<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_quote">
2014-04-09 17:53 GMT+02:00 Chris Muller <span dir="ltr"><<a href="mailto:asqueaker@gmail.com" target="_blank">asqueaker@gmail.com</a>></span>:<div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">It's just a different printOn: method. The new one shows the "truth".<br>
You must now use one of the print formatting methods to display<br>
pretty Floats.<br>
<div><div><br>
On Wed, Apr 9, 2014 at 10:07 AM, Vaidotas Didžbalis <<a href="mailto:vaidasd@gmail.com" target="_blank">vaidasd@gmail.com</a>> wrote:<br>
> 1245 * 0.01 evaluates to 12.45 in Squeak 4.3, but it is<br>
> 12.450000000000001 in later versions.<br>
> regatds,<br>
> Vaidotas<br>
><br>
<br></div></div></blockquote><br></div></div><div>Every two different Float shall have a different printString:<br>(12.45) = (1245*0.01) -> false.<br></div><div>So...<br></div><div><br></div><div>The printString shall be the shortest decimal that rounds to the same float.<br>
</div><div>It's hard to demonstrate with a simple snippet, but you can check that we are very close yet:<br></div><div>((Fraction readFrom: '12.450000000000001') - (1245*0.01) asTrueFraction) / (1245*0.01) ulp.<br>
<div></div>((Fraction readFrom: '12.45') - (1245*0.01) asTrueFraction) / (1245*0.01) ulp.</div><div> <br></div></div><br></div></div></blockquote><div><br></div><div>Maybe some other usefull expressions:<br><br>((1245*0.01) asTrueFraction printShowingMaxDecimalPlaces: Float precision - Float emin + 1)<br>
-> '12.4500000000000010658141036401502788066864013671875'<br><br></div><div>"Find least number of decimals necessary for converting back to the same float"<br></div><div>((1 to: Float precision - Float emin + 1) detect: [:i | ((1245*0.01) asTrueFraction roundTo: (10 raisedTo: i) reciprocal) asFloat = (1245*0.01)])<br>
-> 15<br></div></div><br></div><div class="gmail_extra">"A variant..."<br></div><div class="gmail_extra">((1 to: Float precision - Float emin + 1) detect: [:i | (((1245*0.01) asTrueFraction roundTo: (10 raisedTo: i) reciprocal) - (1245*0.01) asTrueFraction) abs <= ((1245*0.01) ulp / 2)])<br>
-> 15<br><br>((1245*0.01) asTrueFraction printShowingDecimalPlaces: 15)<br> '12.450000000000001'<br></div></div>