Тип double возвращает ошибку -1. # IND / NaN при итеративном вычислении pi - PullRequest
0 голосов
/ 13 июня 2010

У меня проблема с сертификацией MCTS.Программа должна рассчитывать число пи до тех пор, пока пользователь не нажмет клавишу, после чего поток прерывается, результат возвращается в основной поток и печатается в консоли.Достаточно просто, верно?Это упражнение действительно предназначено для работы с потоками, но я сталкиваюсь с другой проблемой.Процедура, которая вычисляет пи, возвращает -1. # IND.Я прочитал некоторые материалы на web об этой ошибке, но я все еще не уверен, как ее исправить.Когда я меняю тип double на тип Decimal, неудивительно, что я очень быстро получаю исключение переполнения.Итак, вопрос в том, как правильно хранить цифры?Нужно ли создавать класс, чтобы каким-то образом хранить части числа, когда оно становится слишком большим для десятичного числа?

Class PiCalculator

Dim a As Double = 1
Dim b As Double = 1 / Math.Sqrt(2)
Dim t As Double = 1 / 4
Dim p As Double = 1
Dim pi As Double
Dim callback As DelegateResult

Sub New(ByVal _callback As DelegateResult)
    callback = _callback
End Sub

Sub Calculate()
    Try
        Do While True
            Dim a1 = (a + b) / 2
            Dim b1 = Math.Sqrt(a * b)
            Dim t1 = t - p * (a - a1) ^ 2
            Dim p1 = 2 * p

            a = a1
            b = b1
            t = t1
            p = p1

            pi = ((a + b) ^ 2) / (4 * t)
        Loop
    Catch ex As ThreadAbortException
    Finally
        callback(pi)
    End Try

End Sub

End Class

1 Ответ

2 голосов
/ 13 июня 2010

p становится inf на шаге 1025.

...