2017-01-14 6 views
0

В моем ответе на вопрос здесь: https://math.stackexchange.com/questions/2093497/finding-number-of-coprime-tuples-from-1-to-n/2094773#2094773 по математике SE, я в настоящее время получаю сообщение об ошибке выполнения на линии:Ошибка времени выполнения VBA 6 - почему это происходит?

P=599*601 

Сообщение об ошибке Ошибка выполнения 6 Переполнение

P определяется как Общественности переменная типа double. Я также использовал p в моей функции «modulo», определенной как double.

Почему это происходит, и что я могу сделать, чтобы исправить это?

Я нашел обходной путь: Если изменить указанную строку, чтобы вместо:

P=359999 

Тогда не возникает ошибка. Следовательно, почему строка P = 599 * 601 дает ошибку?

+0

'P' Двойной? Зачем ? в вашем случае вы должны иметь его «как долго», читайте больше о типах данных здесь: https://msdn.microsoft.com/en-us/library/47zceaw7.aspx –

+0

Поэтому мне нужно изменить оба типа данных на длинные п? - т.е. в «Public P as Double» и в модульной функции «p как двойные» строки? –

+0

Вопрос обновлен, пожалуйста, обратите внимание –

ответ

0

После исследования, я обнаружил, что эта особенность может быть решена с помощью следующего кода:

Dim Prime1 as Long 
Dim Prime2 as Long 
Public P as Long 
... 
P=Prime1 * Prime2 

Причина этой проблемы, вероятно, связано с присвоением целого типа р-за чисел при умножении являются целыми числами.

+0

Причина состоит в том, что оба '599' и' 601' являются целыми числами, поэтому вычисление 'Integer * Integer' пытается дать результат« Integer »и переполнение. Пока одно из двух чисел является «длинным» (например, 'P = 599 & * 601', или' P = 599 * 601 & ', или' P = CLng (599) * 601' и т. Д.), Тогда вычисление Работа. По завершении вычисления результат помещается в 'P', поэтому ни в коем случае' P' не обрабатывается как 'Integer', а только промежуточный расчет. – YowE3K