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