обрабатывать сумму целых чисел, превышающих Long - PullRequest
0 голосов
/ 04 августа 2010

У меня есть следующий код:

Dim L as Integer
Dim R as Integer
Dim a as Integer

a=((L+R)/2)

Теперь (L+R) превышает предел Integer.Для обработки этого случая: у меня есть три следующих варианта:

  1. Определить L (или R) как Long
  2. Запись a= ((CLng(L)+R)/2)
  3. Объявить новыйпеременная как Long:

Вот так

Dim S as Long
S=S+L+R

Я не понимаю, какой из них лучше всего реализовать?

Ответы [ 2 ]

1 голос
/ 04 августа 2010

Измените все переменные на Long.

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

Вы уже разместили здесь несколько вопросов об ошибках целочисленного переполнения. При всем уважении, я действительно советую вам просто изменить все ваши Integer переменные на Long и продолжить работу с вашим кодированием.

0 голосов
/ 04 августа 2010

Я бы выбрал # 2. Я думаю (не уверен), что это использует немного меньше памяти, чем # 1, потому что есть только одно Long-значение в уравнении, где при изменении L или R на Long потребуется пространство для 2 Long значений.

Я думаю, что # 2 и # 3 могут в конечном итоге выглядеть одинаково (или чертовски близко) после компиляции, и я лично считаю, что в этом случае дополнительная переменная не сделает ее более читабельной. Разница, конечно, в том, что в # 2 результат L + R, возможно, не нужно нигде сохранять, а только перемещать между регистрами для вычисления.

Я много думаю здесь, но я публикую это отчасти потому, что надеюсь, что если я ошибаюсь, кто-то меня поправит. Во всяком случае, с рассуждениями выше, я бы пошел с # 2. Изменить: по крайней мере, я совершенно уверен, что если один из вариантов использует меньше памяти, чем другие, это # ​​2, но они могут быть одинаковыми в этом отношении.

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