Hi Jin, Yes that also buged me, had no idea why it does that. I also battled with this one for a while. Perhaps there are more on the mailing list that got some info on this technical point. Thanks for your intrest! Chris On 4/21/05, Wu, Jin Yong <jinyong.wu@xxxxxxxxxxxxx> wrote: > > It's so interesting. At the beginning, I missed the statement "$x = > round($x, 2) + 0.01;", > and can't get corrent answer.Then, I trace the $x value, I found its value > was changed to have > 13 decimal places from 4.43 on. Could you explain it for me?thank you ahead. > > -----Original Message----- > From: JC Botha [mailto:odegos@xxxxxxxxx] > Sent: Wednesday, April 20, 2005 19:50 PM > To: graeme > Cc: php-windows@xxxxxxxxxxxxx > Subject: Re: Re: Jaw Breaker - What's the ansewer? > > Well done Graeme! > > Posted below is what I used to generate the asnwer, I myself had > dificulty to get it. Let me know if you used another method. > > The Source Code > ================================================== > <?php > function f($c) { > $c++; > if ($c % 2) { return f($c); } > return $c++; > } > > function g($n) { > for ($i=1;$i<10;$i++) { > $n = f($n*$i); > } > return ($n); > } > $x = 0.00; > while ($x < 10){ > > $x = round($x, 2) + 0.01; > $l = (g($x)); > > if ($l == 4277108){ > echo("<font color='red'>:: x = $x : $l</font> <br/>"); > } > //echo ("> $x : $l<br/>"); > > } > > ?> > > ================================================= > > On 4/20/05, graeme <graeme_foster@xxxxxxxxxxxxxxxx> wrote: > > Yes it is an issue with floating point numbers since: > > > > 8.35 will give the answer but if you increment by .01 in a loop then you > > will not get the answer, when it is on 8.35. However, increment by 0.001 > > then 8.35 will provide the correct answer. It's all to do with how in > > calculates 0.01 in binary, a rational fraction in binary. > > > > graeme. > > > > JC Botha wrote: > > > > >It is possible, and "10.642868165785" is incorrect. The question says > > >"$x is a number between 1 and 10 and has 2 decimal places." > > > > > >Try again, if more try then I will post the source code that generates > > >the asnwer? > > > > > > > > > > > >On 4/20/05, M. Sokolewicz <tularis@xxxxxxx> wrote: > > > > > > > > >>JC Botha wrote: > > >> > > >> > > >>>The following is a section of PHP code (see Apache.org and PHP.net). > > >>> > > >>> function f($c) { > > >>> $c++; > > >>> if ($c % 2) { return f($c); } > > >>> return $c++; > > >>> } > > >>> > > >>> function g($n) { > > >>> for ($i=1;$i<10;$i++) { > > >>> $n = f($n*$i); > > >>> } > > >>> return ($n); > > >>> } > > >>> > > >>> print(g($x)); > > >>> > > >>>What is the smallest value that $x can have if 4277108 is outputted to > > >>>the screen after running this code? > > >>>$x is a number between 1 and 10 and has 2 decimal places. > > >>> > > >>> > > >>it's not a jawbreaker, it's impossible IMO. > > >>f() always returns the number if it's uneven, or if it's even, it > > >>returns (n+1). So, it always returns uneven. which means the result of > > >>g() can *never* be even. > > >> > > >>[[side note: > > >>unless "return $c++;" does first add 1 to it before returning, but I > > >>think it doesn't, since it's a postincrement operator. > > >>]] > > >> > > >>-- > > >>PHP Windows Mailing List (http://www.php.net/) > > >>To unsubscribe, visit: http://www.php.net/unsub.php > > >> > > >> > > >> > > >> > > > > > > > > > > > > > -- > > Experience is a good teacher, but she sends in terrific bills. > > > > Minna Antrim > > > > > > -- > PHP Windows Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP Windows Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php