LINUX.ORG.RU

[python][что за...]Округление

 


0

1

-12 % 5 = 3 Как вобще такое возможно? что за правила такие? Как на нем вобще что то пишут в таких услових??

//python 3.2



Последнее исправление: RA (всего исправлений: 1)

Рыдал с этого треда. Автор, намеренно ты создал такую тему или по глупости, без разницы, все равно тебе огромное спасибо.

strangeman ★★★★
()

The Python Language Reference: Binary arithmetic operations

Оператор % (модуль) возвращает остаток от деления первого операнда на второй. <…> Оператор модуля всегда возвращает значение со знаком как у второго операнда (либо 0), абсолютное значение результата строго меньше абсолютного значения второго операнда.
Параграф выше
Операторы / (деление) и // (целочисленное деление с округлением вниз) возвращают частное от деления операндов. <…> целочисленное деление возвращает целое значение, результат есть частное от деления, округлённое вниз.
Википедия:
a % n = a - (n * int(a/n))
или
a % n = a - n * a // n
-12 % 5 == -12 - (5 * (-12 // 5) == -12 - -15 == 3

// Things just happen. What the hell.

Xenesz ★★★★
()
Ответ на: комментарий от AIv

Выучите уже матчасть наконец... -12%3 всегда было, есть и надеюсь будет равно ТРЕМ, во всех ЯП кроме м.б. лиспа;-)

И кроме PHP.

$ php -r 'echo -12 % 5;'
-2

Очевидно, ТС — бывший phpпер, которого насильно заставили писать на питоне.

geekless ★★
()
Ответ на: комментарий от geekless

нет, я думал что знак влияет только на знак результата.

RA
() автор топика
Ответ на: комментарий от geekless

равно ТРЕМ, во всех ЯП кроме м.б. лиспа;-)

И кроме PHP.

На en.wikipedia.org пишут, что знак результата совпадает со знаком:

делимого) bash, C-99, C#, D, Java, JavaScript, Objective Caml, PHP, SQL:1999, Visual Basic, x86 Assembly и др.

делителя) Clojure, Lua, MathCAD, Perl, Python, R, Smalltalk, Tcl и др.

оба варианта) Ada, Common Lisp, Fortran, Haskell, MATLAB, Prolog, Ruby, Scheme и др.

Xenesz ★★★★
()
Ответ на: комментарий от Xenesz

> bash, C-99, C#, D, Java, JavaScript, Objective Caml, PHP, SQL:1999, Visual Basic, x86 Assembly и др.

Clojure, Lua, MathCAD, Perl, Python, R, Smalltalk, Tcl, Common Lisp, Fortran, Haskell, MATLAB, Prolog, Ruby, Scheme и др.

Хых. Наблюдаем хорошую корреляцию с тем, делался ли язык «как получится» или с умом.

geekless ★★
()
Ответ на: комментарий от geekless

Хороший вброс.

По мне так положительный остаток полезнее. С ним легко можно перебирать элементы массива по кольцу в обе стороны. Кто-нибудь знает для чего может понадобиться отрицательный остаток?

baverman ★★★
()
Ответ на: комментарий от baverman

> Кто-нибудь знает для чего может понадобиться отрицательный остаток?

Всякая криптография? Реализуешь свой модуль на пхп... и никто его сломать не в состоянии, все думают что в алгоритме остаток положительный, а у тебя отрицательный!;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

PHP

Дык в стандарте «C» закреплено такое же поведение. А для C++ вообще «implementation specific». Питон тут скорее девиант, чем норма.

baverman ★★★
()
Ответ на: комментарий от baverman

А, ну значит все криптографию пишут... а питон для другого;-)

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.