2014-09-19 4 views
0

Я новичок в SAGE, и у меня проблема с чем-то очень простым. У меня есть следующий код:Modulo in sage возвращает отрицательное значение

delay = float(3.5) 
D = delay%1.0 
D 

Но это возвращает значение -0.5 вместо ожидаемого 0.5. Что я делаю не так?

Если я поменяю задержку на delay = float(2.5), я получаю правильный ответ, поэтому я не знаю, почему он не является последовательным (я уверен, что каким-то образом я использую modulo wrong).

ответ

2

Я думаю, что this question ответит на все, что действительно хорошо для вас.

Однако я не знаю, почему вы используете float в Sage. Тогда вы могли бы просто использовать Python прямо. Во всяком случае, оператору % сложно использовать за пределами целых чисел. Например, здесь приведена докшрина для ее использования на рациональных числах Sage.

Return the remainder of division of self by other, where other is 
    coerced to an integer 

    INPUT: 

    * ``other`` - object that coerces to an integer. 

    OUTPUT: integer 

    EXAMPLES: 

     sage: (-4/17).__mod__(3/1) 
     1 

Я предполагаю, что это считается признаком, а не ошибкой.

+0

Спасибо, это было хорошо читать и все объясняли. Поскольку я просто пытаюсь получить десятичную часть значения, я изменил этот раздел кода на 'D = float (str (delay-int (delay)) [1:])'. Кроме того, я был типизирован как float как попытка сделать modulo работу, я с тех пор удалил их. – toozie21

Смежные вопросы