Во-первых, обратите внимание, что объявление x, y, z в качестве переменных - это не то, что вам нужно, потому что это символическая переменная;Вы можете просто сделать x=2
без прелюдии.Это не очень актуально, но, надеюсь, полезно.
Что касается вашего вопроса, ваши цифры немного отличаются.То, как они распечатывают, не является внутренним представлением.
sage: s1= (sin(x)).n()
....: s2= (sin(x)).n(digits=3)
sage: r1= (sin(x)).n()
....: r2= (0.909).n(digits=3)
....:
sage: s2 == r2
False
sage: s2 - r2
0.000305
sage: s2.sign_mantissa_exponent()
(1, 14898, -14)
sage: r2.sign_mantissa_exponent()
(1, 14893, -14)
Вы можете видеть, что они немного отличаются от компьютера, предположительно из-за оригинальной разницы
sage: sin(2.)
0.909297426825682
sage: 0.909
0.909000000000000
Принимая во внимание
sage: r1 - s1
0.000000000000000
Способ, которым работает точность цифр, не совсем то же самое, что просто усечение, и сохраняет немного дополнительной информации для обеспечения точности.
Мораль: будьте очень осторожны с числовой работойесли вы действительно не понимаете, что реальные цифры не совпадают с тем, что есть в компьютере.К счастью, для большинства практических целей комментарии Джона вам пригодятся, иначе я бы попал в беду, как человек, который определенно не является численным аналитиком.