История изменений
Исправление 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 - это норма.