Переполнение системы при передаче больших чисел в функцию - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь написать программу для моделирования солнечной системы, и я передаю большие числа в функцию для расчета гравитационной силы. Соответствующая строка кода:

Earth.ptyForce = CalculateForce(Earth.ptyMass, Sun.ptyMass, dblSeparation)

Где:

  • Earth.ptyMass равно 5.9736 * 10 ^ 24
  • Sun.ptyMass равно 1.989 * 10 ^ 30
  • dblSeparation равно только 300 и масштабируется внутри функции.

У меня просто переполнение системы, и я подозреваю, что это потому, что цифры слишком велики, есть ли способ обойти это? Я рассмотрел просто передачу меньших чисел в функцию и их масштабирование, но я бы предпочел избегать этого, если это возможно.

На всякий случай CalculateForce Функция выглядит следующим образом:

Public Function CalculateForce(ByVal intMass1 As Integer, ByVal intMass2 As Integer, ByVal dblDistance As Double)
    dblDistance *= dblDistanceScalar
    Return dblGravitationalConstant * intMass1 * intMass2 / dblDistance ^ 2
End Function

Ошибка конкретно гласит:

System.OverflowException: 'Арифметическая операция вызвала переполнение.'

1 Ответ

0 голосов
/ 02 сентября 2018

Ваш номер слишком большой, 10 ^ 30 больше, чем 2 ^ 32, прочитайте это:

https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/numeric-data-types

...