Changeset 257 for Include/basic/function.sbp
- Timestamp:
- May 19, 2007, 3:29:33 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Include/basic/function.sbp
r251 r257 9 9 Const _System_LOG2 = 0.6931471805599453094172321214581765680755 10 10 Const _System_SQRT2 = 1.41421356237309504880168872421 11 Const _System_Log_N = 7 As Long 11 12 12 13 … … 21 22 Exit Function 22 23 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 27 26 n += (pSrc[0] >> 52) As DWord And &h7FF 28 29 27 pDest[0] = n << 52 Or (pSrc[0] And &h800FFFFFFFFFFFFF) 30 28 End Function … … 37 35 End If 38 36 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 42 39 n = ((pSrc[0] >> 52) As DWord And &h7FF) - 1022 43 40 pDest[0] = (pSrc[0] And &h800FFFFFFFFFFFFF) Or &h3FE0000000000000 … … 100 97 End Function 101 98 102 Function _System_GetInf(sign As B OOL) As Double99 Function _System_GetInf(sign As Boolean) As Double 103 100 Dim s = 0 As QWord 104 101 If sign Then s = 1 << 63 … … 115 112 End Function 116 113 117 Function _System_GetInf(sign As B OOL) As Double114 Function _System_GetInf(sign As Boolean) As Double 118 115 Dim s = 0 As DWord 119 116 If sign Then s = (1 As DWord) << 31 … … 240 237 End Function 241 238 239 Function 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 249 End Function 250 251 Function _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) 260 End Function 261 242 262 Function Sgn(number As Double) As Long 243 263 Sgn = Math.Sign(number) … … 293 313 Dim p As *DWord 294 314 p = VarPtr(x) As *DWord 295 IsNaN = F ALSE315 IsNaN = False 296 316 If (p[1] And &H7FF00000) = &H7FF00000 Then 297 317 If (p[0] <> 0) Or ((p[1] And &HFFFFF) <> 0) Then … … 299 319 End If 300 320 End If 301 302 ' IsNaN=FALSE303 321 End Function 304 322 … … 307 325 p = VarPtr(x) As *DWord 308 326 p[1] And= &h7fffffff 309 nan = _System_GetInf(F ALSE)327 nan = _System_GetInf(False) 310 328 IsInf = (memcmp(p As *Byte, VarPtr(nan), SizeOf (Double)) = 0) 311 329 End Function … … 321 339 p[1] And= &H7FF00000 322 340 p[0] = 0 323 nan = _System_GetInf(/*x,*/ F ALSE)341 nan = _System_GetInf(/*x,*/ False) 324 342 IsFinite = (memcmp(p As BytePtr, VarPtr(nan), SizeOf (Double)) = 0) 325 343 End Function
Note:
See TracChangeset
for help on using the changeset viewer.