获取NaN的双数据类型

时间:2013-02-20 06:28:30

标签: vb.net double algebraic-data-types

我正在尝试运行一些具有大值的数学公式,因此我使用的是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

2 个答案:

答案 0 :(得分:2)

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

因此,不要乘以* b(导致溢出),而是使用

Y = log(a) + log(b)

答案 1 :(得分:0)

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

有关Decimal的确切规格,请参阅MSDN on decimal