2013-11-10 3 views
3

Я пробовал это за Python. Я знаю, что использование int и выполнение их деления возвратит только целочисленное значение частного, усекая десятичную часть. На этой ноте:Почему значение деления -ve int отличается от + ve one?

3/2 = 1

Звучит совершенно правильно ... Однако, когда делимое отрицательно, то это невероятно для меня, чтобы понять, что происходит за кулисами? ?

-3/2 = -2

Вот результат:

enter image description here

+2

Это был выбор дизайна: http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html – Mark

ответ

2

Целочисленное деление только принимает слово от числа, полученного в конце.

3/2 -> floor(1.5) -> 1 
-3/2 -> floor(-1.5) -> -2 
+0

Thanx a ton ... теперь я понимаю, как это глупо было ! – Z9iT

2

значение Поплавок не обрезано - оно округляется вниз, то есть в сторону отрицательной бесконечности.

0

Натуральные числа и вещественные числа обладают тем свойством, что (n + d)/d равно (n/d) +1. Вещественные числа имеют дополнительное свойство, которое (-n)/d равно - (n/d). Можно определить целые числа, чтобы иметь одно из указанных выше свойств, но не оба.

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

Возможно, лучше всего использовать язык «слово» (например, divt) для деления, а не для пунктуации. Это позволит коду указывать, хочет ли он усеченное деление или разделение на пол, желает, чтобы компилятор произвольно выбирал то, что было бы самым быстрым в любом данном сценарии, или желает, чтобы компилятор сделал что-нибудь с отрицательными номерами в обмен для повышения числа положительных чисел (например, на процессоре с инструкцией «без знака», которая быстрее, чем «подписанное разделение», такой оператор позволит процессору использовать «беззнаковый»). Тем не менее, я не знаю других языков, которые это делают.

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

  • Нет связанных вопросов^_^