RE: Re: Jaw Breaker - What's the ansewer?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [PHP Home]     [PHP Users]     [PHP Database Programming]     [PHP Install]     [Kernel Newbies]     [Yosemite Forum]     [PHP Books]

  Powered by Linux