GD Star Rating
loading...

GNU bash, version 4.2.24:

$> printf “%.0f, %.0fn” 48.5 49.5

48, 50

ruby 1.8.7

> printf( “%.0f, %.0fn”, 48.5, 49.5 )

48, 50

perl 5.12.4

$> perl -e ‘printf( “%.0f, %.0fn”, 48.5, 49.5 )’

48, 50

gcc 4.5.3:

> printf( “%.0f, %.0fn”, 48.5, 49.5 );

48, 50

GHCi, version 7.0.4:

> printf “%.0f, %.0fn” 48.5 49.5

49, 50

Вполне возможно, что парсер сжевал собуквия. Коротко о главном: при округлении 48.5 и 49.5 хотелось бы получить 49 и 50 соответственно. Баш – мимо, руби – мимо, гцц – мимо, перл – мимо, хаскель – в точечку.

Непродолжительный поиск привёл к следующему: действительно, существует такой способ округления “до чётного” (https://en.wikipedia.org/wiki/Rounding#R… также именуемый банковским округлением.

This is the default rounding mode used in IEEE 754 computing functions and operators.

Кто виноват, что делать?

Tagged with →  

9 Responses to GNU bash, version 4.

  1. Phplinux:

    gcc 4.6.1 (MinGW)
    49, 50

    gcc 4.6.1
    48, 50

    Прикольно.

  2. Sukon:

    Виноват IEEE 754, не ебать себе мозги.

  3. Dnaprado:

    Не понял твоего возмущения, Хаскелл угадывает твои мысли, а остальные языки не делают этого?

  4. IihFcuk:

    iam_weasel: неясно кому вообще нужно округление до чётного.

  5. Ovenode:

    : на больших объёмах данных ошибка округления получается меньше

  6. Xuaapp:

    : округление до четного дает меньше ошибок. Поэтому оно нужно всем и узаконено стандартами.

  7. OHAed:

    $ ruby -e ‘puts 48.5.round’
    49

    $ -r ‘printf(“%fn”, round(48.5));’
    49.000000

    Просто округлить спецфункциями религия не позволяет?

  8. LanTunes:

    floor, ceil и никто не виноват.

Добавить комментарий