Сравнивая два числа в мудреце - PullRequest
0 голосов
/ 04 июня 2018

Я хотел бы знать, почему, сравнивая два действительных числа (например, bool(r1 == r2)) в sage cas online, он возвращает неправильные логические значения.

Например: 1:

(x,y,z)=var('x,y,z');
x=2
r1= (sin(x)).n()
r2= (sin(x)).n(digits=3)
print r1, type(r1)
print r2, type(r2)
bool(r1==r2)

0.909297426825682== 0,909 True

Но, например, 2

(x,y,z)=var('x,y,z');
x=2
r1= (sin(x)).n()
r2= (0.909).n(digits=3)
print r1, type(r1)
print r2, type(r2)
bool(r1==r2)

0,909297426825682 == 0,909 False

Или, например ,§3

(x,y,z)=var('x,y,z');
x=2
r1= 0.909297426825682.n(digits=3)
r2= (0.909).n(digits=3)
print r1, type(r1)
print r2, type(r2)
bool(r1==r2)

0,909 ==0,909 False

В моем проекте я хотел бы сравнить пользовательский ответ, который можно округлить, например, до 3 десятичных знаков, с 53-битным решением CAS-решения, которое может быть как символическим, так и числовым значением.Thanx

1 Ответ

0 голосов
/ 11 августа 2018

Во-первых, обратите внимание, что объявление 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

Способ, которым работает точность цифр, не совсем то же самое, что просто усечение, и сохраняет немного дополнительной информации для обеспечения точности.

Мораль: будьте очень осторожны с числовой работойесли вы действительно не понимаете, что реальные цифры не совпадают с тем, что есть в компьютере.К счастью, для большинства практических целей комментарии Джона вам пригодятся, иначе я бы попал в беду, как человек, который определенно не является численным аналитиком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...