Чому vim дозволяє ціле ділення на нуль?


16

Я щойно виявив, що vim, очевидно, дозволяє ділити на нуль:

:let a=42/0
:echo a

відбитки 2147483647(що є значенням a).

Це десь задокументовано і чому vim дозволяє поділ на нуль?


2
Спробуйте :echo 42/0.0побачити інший результат :)
VanLaser,

Відповіді:


9

Така поведінка задокументована в розділі eval :

When dividing a Number by zero the result depends on the value:
      0 / 0  = -0x80000000  (like NaN for Float)
     >0 / 0  =  0x7fffffff  (like positive infinity)
     <0 / 0  = -0x7fffffff  (like negative infinity)
    (before Vim 7.2 it was always 0x7fffffff)

15

Ось чому:

42 / 0 tends to +infinity

І як Vim представляє найбільшу кількість доступних?

2147483647

Побачити :h limits

Крім того, у float2nrдокументації про функції зазначено:

When the value of {expr} is out of range for a |Number| the
result is truncated to 0x7fffffff or -0x7fffffff.  NaN results
in -0x80000000.

Отже, ви маєте тут свої 2 номери: + 2147483647і - 2147483647.

Останнє число -2147483648використовується для представлення NaNзначення.

Це підтверджується evalрозділом на ньому (mea culpa: @cuonglm розмістив його безпосередньо перед мною):

When dividing a Number by zero the result depends on the value:
    0 / 0  = -0x80000000    (like NaN for Float)
   >0 / 0  =  0x7fffffff    (like positive infinity)
   <0 / 0  = -0x7fffffff    (like negative infinity)

Як заявив @VanLaser, це працює лише для цілого числа, для номера з плаваючою комою ви маєте більшу послідовність:

 1/0.0     =  inf
 1/0.0 + 1 =  inf
 1/0.0 - 1 =  inf

-1/0.0     = -inf
-1/0.0 - 1 = -inf
-1/0.0 + 1 = -inf

У такому випадку, чому ділення від’ємного числа на 0 не є мінімальним числом? -> vi.stackexchange.com/questions/4623/…
Якоб

Я відредагував своє запитання
nobe4

2147483647, безумовно, набагато ближче до нуля, ніж до нескінченності. Отже, представляти нескінченність з такою невеликою кількістю не здається корисним, принаймні, не для мене.
Рене Ніффенеггер

2

Така поведінка корисна в обчисленні, коли використовується щось, що називається ліміт.

Lim n -> 0 ^ + of 1 / n = + inf

Це також можна записати так: Як n -> 0 ^ +, 1 / n -> + inf

Він читається так. Коли n наближається до нуля праворуч, функція 1 / n наближається до позитивної нескінченності.

Щоб побачити візуальне пояснення цього міркування, перейдіть на сторінку http://www.wolframalpha.com/input/?i=limit+n-%3E0+of+1%2Fn

Що стосується конкретно Vim-скрипту, то AFAIK не багато людей робить набагато більше, ніж логіка та ціла арифметика. Можливо, така поведінка здавалася гарною ідеєю в той час і є лише спадковим артефактом на даний момент.


Чи є у вас джерело для останнього абзацу? Поділ
цілого

О, ти маєш рацію. Я вилучаю абзац.
Шейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.