Changeset 257 for Include/basic


Ignore:
Timestamp:
May 19, 2007, 3:29:33 PM (17 years ago)
Author:
イグトランス (egtra)
Message:

VersionTest追加、Log1p追加

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Include/basic/function.sbp

    r251 r257  
    99Const _System_LOG2 = 0.6931471805599453094172321214581765680755
    1010Const _System_SQRT2 = 1.41421356237309504880168872421
     11Const _System_Log_N = 7 As Long
    1112
    1213
     
    2122        Exit Function
    2223    End If
    23     Dim pSrc As *QWord, pDest As *QWord
    24     pSrc = VarPtr(x) As *QWord
    25     pDest = VarPtr(ldexp) As *QWord
    26 
     24    Dim pSrc = VarPtr(x) As *QWord
     25    Dim pDest = VarPtr(ldexp) As *QWord
    2726    n += (pSrc[0] >> 52) As DWord And &h7FF
    28 
    2927    pDest[0] = n << 52 Or (pSrc[0] And &h800FFFFFFFFFFFFF)
    3028End Function
     
    3735    End If
    3836
    39     Dim pSrc As *QWord, pDest As *QWord
    40     pSrc = VarPtr(x) As *QWord
    41     pDest = VarPtr(frexp) As *QWord
     37    Dim pSrc = VarPtr(x) As *QWord
     38    Dim pDest = VarPtr(frexp) As *QWord
    4239    n = ((pSrc[0] >> 52) As DWord And &h7FF) - 1022
    4340    pDest[0] = (pSrc[0] And &h800FFFFFFFFFFFFF) Or &h3FE0000000000000
     
    10097End Function
    10198
    102 Function _System_GetInf(sign As BOOL) As Double
     99Function _System_GetInf(sign As Boolean) As Double
    103100    Dim s = 0 As QWord
    104101    If sign Then s = 1 << 63
     
    115112End Function
    116113
    117 Function _System_GetInf(sign As BOOL) As Double
     114Function _System_GetInf(sign As Boolean) As Double
    118115    Dim s = 0 As DWord
    119116    If sign Then s = (1 As DWord) << 31
     
    240237End Function
    241238
     239Function Log1p(x As Double) As Double
     240    If x < -1 Or IsNaN(x) Then
     241        Log1p = _System_GetNaN()
     242    ElseIf x = 0 Then
     243        x = 0
     244    ElseIf IsInf(x) Then
     245        Log1p = x
     246    Else
     247        Log1p = _System_Log1p(x)
     248    End If
     249End Function
     250
     251Function _System_Log1p(x As Double) As Double
     252    Dim s = 0 As Double
     253    Dim i = 7 As Long
     254    While i >= 1
     255        Dim t = (i * x) As Double
     256        s = t / (2 + t / (2 * i + 1 + s))
     257        i--
     258    Wend
     259    Return x / (1 + s)
     260End Function
     261
    242262Function Sgn(number As Double) As Long
    243263    Sgn = Math.Sign(number)
     
    293313    Dim p As *DWord
    294314    p = VarPtr(x) As *DWord
    295     IsNaN = FALSE
     315    IsNaN = False
    296316    If (p[1] And &H7FF00000) = &H7FF00000 Then
    297317        If (p[0] <> 0) Or ((p[1] And &HFFFFF) <> 0) Then
     
    299319        End If
    300320    End If
    301 
    302 '   IsNaN=FALSE
    303321End Function
    304322
     
    307325    p = VarPtr(x) As *DWord
    308326    p[1] And= &h7fffffff
    309     nan = _System_GetInf(FALSE)
     327    nan = _System_GetInf(False)
    310328    IsInf = (memcmp(p As *Byte, VarPtr(nan), SizeOf (Double)) = 0)
    311329End Function
     
    321339    p[1] And= &H7FF00000
    322340    p[0] = 0
    323     nan = _System_GetInf(/*x,*/ FALSE)
     341    nan = _System_GetInf(/*x,*/ False)
    324342    IsFinite = (memcmp(p As BytePtr, VarPtr(nan), SizeOf (Double)) = 0)
    325343End Function
Note: See TracChangeset for help on using the changeset viewer.