Hacker Newsnew | comments | show | ask | jobs | submit login

    // Scheme
    (print (* 1000000 8.2))
    > 8199999.999999999

    // Python
    >>> 1000000 * 8.2
    8199999.999999999

    //PHP
    > 1000000 * 8.2
    > 8199999.999999999



    # Ruby 1.8.7
    1.8.7 :022 > 1000000 * 8.2
     => 8200000.0 

    # Ruby 1.9.2
    1.9.2p320 :001 > 1000000 * 8.2
     => 8199999.999999999

-----


I can't reproduce the PHP example:

  $ uname -p
  x86_64
  $ php -v
  PHP 5.4.6-1ubuntu1 (cli) (built: Aug 22 2012 21:13:52)
  Copyright (c) 1997-2012 The PHP Group
  Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
  $ php -r 'var_dump(1000000 * 8.2);'
  float(8200000)
  $

-----


My fault, I think I copied from the wrong REPL.

-----


C/C++:

   printf("%lf\n", 1000000 * 8.2);
   8200000.000000
Here, printf() is doing the necessary rounding to hide the fact that 8.2 isn't exactly representable. It's interesting that other languages don't do something similar when outputting a float to text.

-----


They do, you just have to request it:

    //Python
    >>> repr(1000000 * 8.2)
    '8199999.999999999'
    >>> "%lf" % (1000000 * 8.2)
    '8200000.000000'

-----




Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact

Search: