LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

Числа с плавающей точкой не десятичные, а двоичные, они округляются в момент превращения из строки 5.6 во внутреннее представление, при этом они из 5.6 превращаются в какое-нибудь 5.60000001, потому что двоичного числа, точно представляющего 5.6, в двоичной системе, в формате представления с плавающей точкой просто-напросто нет и рантайм выбирает ближайшее. Далее C++ их правильно умножает. И получается какое-нибудь 56.00000001. Дальше ты их печатаешь. Если в каком-то языке печать тоже округляет, тебе может показаться, что получилось 56.0. С++ видимо не округляет на твоих примерах.

Возможно, тебе нужны binary coded decimal (двоично-десятичный код), но скорее всего они тебе не нужны и нужно просто смириться. Ты же не рубли считаешь, а точки в пространстве.

Исправление den73, :

Числа с плавающей точкой не десятичные, а двоичные, они округляются в момент превращения из строки 5.6 во внутреннее представление, при этом они из 5.6 превращаются в какое-нибудь 5.60000001, потому что двоичного числа, точно представляющего 5.6, в двоичной системе, в формате представления с плавающей точкой просто-напросто нет и рантайм выбирает ближайшее. Далее C++ их правильно умножает. И получается какое-нибудь 56.00000001. Дальше ты их печатаешь. Если в каком-то языке печать тоже округляет, тебе может показаться, что получилось 56.0. С++ видимо не округляет на твоих примерах.

Возможно, тебе нужны binary coded decimal (двоично-десятичный код), но скорее всего он тебе не нужен и нужно просто смириться.

Исправление den73, :

Числа с плавающей точкой не десятичные, а двоичные, они округляются в момент превращения из строки 10.0 во внутреннее представление, при этом они из 10.0 превращаются в какое-нибудь 10.00000001. Далее C++ их правильно умножает. И получается какое-нибудь 56.00000006. Дальше ты их печатаешь. Если в каком-то языке печать тоже округляет, тебе может показаться, что получилось 56.0. С++ видимо не округляет на твоих примерах.

Возможно, тебе нужны binary coded decimal (двоично-десятичный код), но скорее всего он тебе не нужен и нужно просто смириться.

Исправление den73, :

Числа с плавающей точкой не десятичные, а двоичные, они округляются в момент превращения из строки 10.0 во внутреннее представление, при этом они из 10.0 превращаются в какое-нибудь 10.00000001. Далее C++ их правильно умножает. И получается какое-нибудь 56.000000006. Дальше ты их печатаешь. Если в каком-то языке печать тоже округляет, тебе может показаться, что получилось 56.0. С++ видимо не округляет на твоих примерах.

Возможно, тебе нужны binary coded decimal (двоично-десятичный код), но скорее всего он тебе не нужен и нужно просто смириться.

Исправление den73, :

Числа с плавающей точкой не десятичные, а двоичные, они округляются в момент превращения из строки 10.0 во внутреннее представление. Т.е. C++ считает правильно. Возможно, тебе нужны binary coded decimal (двоично-десятичный код), но скорее всего он тебе не нужен и нужно просто смириться, что 3.99999999 - это норма. Иллюзия того, что это 4, может возникнуть во время печати такого числа, если оно и при печати округляется.

Исправление den73, :

Числа с плавающей точкой не десятичные, а двоичные, они округляются в момент превращения из строки 10.0 во внутреннее представление. Т.е. C++ считает правильно. Возможно, тебе нужны binary coded decimal (двоично-десятичный код), но скорее всего он тебе не нужен и нужно просто смириться, что 3.99999999 - это норма.

Исходная версия den73, :

Числа с плавающей точкой не десятичные, а двоичные, они округляются в момент превращения из строки 10.0 во внутреннее представление. Возможно, тебе нужны binary coded decimal (двоично-десятичный код), но скорее всего он тебе не нужен и нужно просто смириться, что 3.99999999 - это норма.