Из-за обычных ошибок с плавающей точкой выражение, которое вы печатаете, оценивается в чуть меньше 27.Компьютер не может точно представить натуральный логарифм 3, поэтому любые дальнейшие вычисления на его основе также будут иметь ошибки.
В комментариях вы заявляете, что exp (3 * ln (3)) = 27.000, но вы 'Мы не показали никаких программных доказательств этого утверждения.Ваш код говорит, что exp (3 * ln (3)) = 27, что менее точно.Он печатает это, потому что вы явно сказали WriteLn
использовать меньшую точность. Часть :0:0
- это не просто украшение. Это означает, что вы хотите напечатать результат с нулевым десятичным разрядом.Когда вы говорите WriteLn
сделать это, он округляет до такого количества десятичных разрядов.В этом случае округляется до .Но когда вы вводите вызов на Int
, вы усекаете почти 27 значение ровно до 26, а затем WriteLn
тривиально округляет его до 26 перед его печатью.
Если выскажите WriteLn
, чтобы отобразить больше десятичных знаков, вы должны увидеть разные результаты.Обратитесь к документации для Write
, чтобы узнать, что означают числа после двоеточий.