NT писал(а):Source of the post
А я бы обратил внимание на то, что внутри цикла (in Function ArcSin ... For n = 0 To 85 {...})
каждое обращение к функции Fact(n) , по-существу считает факториал с самого начала.
Не это Fact(2 * n), а это Fact(n)^ 2.
Можно было бы задекларировать ее с 2-я аргументами,
в случе если подан только 1 аргумент, то выполнять в цикле(так как было),
если поданы оба аргумента, то результат выдавать как произведение 1-го аргумента на 2-й аргумент.Код: Выбрать все
Типа такого :
Function Fact(x As Long, Optional y As Double = 0) As Double
If y > 0 Then
Fact = y * x
Exit Function
End If
Dim i As Long
Fact = 1
For i = 1 To x
Fact = Fact * i
Next i
End Function
Это, я так понимаю, лишь оптимизирует алгоритм (причем совершенно незначительно). На точность никак не повлияет. Ибо бейсик в любом случае считает в Double и если какое из значений перевалит за 9E+307, то Overflow.