2

我正在尝试运行一些具有较大值的数学公式,因此我正在使用Double数据类型。但是,如果我输入较大的值,我仍然会得到 NaN 的答案。那么我该如何解决呢?

例如,如果我通过 Varx=3 和 countx=1230,我得到的结果是 NaN。

Public Function EulerForPro(ByVal Varx As Integer, ByVal Countx As Integer) As Double

    Dim Result1 As Double = 1
    Dim Result2 As Double = Varx
    Dim Result As Double = 0

    For i = 1 To Countx
        Result1 = Result1 + (Math.Pow(-1, i) * Math.Pow(Varx, (2 * i)) / factx(2 * i))
    Next
    For i = 1 To Countx
        Result2 = Result2 + (Math.Pow(-1, i) * Math.Pow(Varx, ((2 * i) + 1)) / factx((2 * i) + 1))
    Next
    Result = Result1 + Result2
    Label2.Text = Result1
    Label3.Text = Result2
    Label4.Text = Result
End Function
4

2 回答 2

2

使用结果的对数。这是大数字的标准做法。

因此,不要将 a*b 相乘(这会导致溢出),而是使用

Y = log(a) + log(b)
于 2013-02-20T06:32:38.310 回答
0

您可以尝试改用Decimal数据类型。它可以保存一个大约为整数的值7,9 x 10^28(确切的数字是2^96 - 1,因为它可以使用 128 位中的 96 位来存储值的整数部分)。但是,它是一种复杂的数据类型,您应该仔细考虑如何在代码中使用它。并非所有隐式转换都有效,尤其是在使用Double.

有关. _ _Decimal

于 2013-02-20T07:33:24.627 回答