Changeset 589 for trunk/ab5.0/ablib/src/basic
- Timestamp:
- Aug 15, 2008, 1:00:15 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/ablib/src/basic/function.sbp
r581 r589 2 2 3 3 Const _System_PI = 3.14159265358979323846264 4 Const _System_LOG2 = 0.69314718055994530941723212145817656807555 4 Const _System_SQRT2 = 1.41421356237309504880168872421 6 Const _System_Log_N = 7 As Long7 5 8 6 '------------- サポート関数の定義 ------------- 9 7 10 Function ldexp(x As Double, n As Long) As Double11 If x = 0 Then12 ldexp = 013 Exit Function14 End If15 Dim pSrc = VarPtr(x) As *QWord16 Dim pDest = VarPtr(ldexp) As *QWord17 n += (pSrc[0] >> 52) As DWord And &h7FF18 pDest[0] = n << 52 Or (pSrc[0] And &h800FFFFFFFFFFFFF)19 End Function20 21 Function frexp(x As Double, ByRef n As Long) As Double22 If x = 0 Then23 n = 024 frexp = 025 Exit Function26 End If27 28 Dim pSrc = VarPtr(x) As *QWord29 Dim pDest = VarPtr(frexp) As *QWord30 n = ((pSrc[0] >> 52) As DWord And &h7FF) - 102231 pDest[0] = (pSrc[0] And &h800FFFFFFFFFFFFF) Or &h3FE000000000000032 End Function33 34 Function frexp(x As Single, ByRef n As Long) As Single35 If x = 0 Then36 n = 037 frexp = 038 Exit Function39 End If40 41 Dim pSrc As *DWord, pDest As *DWord42 pSrc = VarPtr(x) As *DWord43 pDest = VarPtr(frexp) As *DWord44 n = ((pSrc[0] >> 23) And &hFF) - 12645 pDest[0] = (pSrc[0] And &h807FFFFF) Or &h7E00000046 End Function47 48 8 Function ipow(x As Double, n As Long) As Double 49 Dim abs_n As Long 50 Dim r = 1 As Double 51 52 abs_n=Abs(n) As Long 53 While abs_n<>0 54 If abs_n and 1 Then r *= x 55 x = x * x 56 abs_n >>= 1 ' abs_n \= 2 57 Wend 58 59 If n>=0 Then 60 ipow=r 61 Else 62 ipow=1/r 63 End If 9 ipow = ActiveBasic.Math.pow(x, n) 64 10 End Function 65 11 66 12 Function pow(x As Double, y As Double) As Double 67 ' If -LONG_MAX<=y and y<=LONG_MAX and y=CDbl(Int(y)) Then 68 If y = (y As Long) Then 69 pow = ipow(x, y As Long) 70 ElseIf x>0 Then 71 pow = Exp(y * Log(x)) 72 Exit Function 73 ElseIf x<>0 or y<=0 Then 74 pow = ActiveBasic.Math.Detail.GetNaN() 75 Else 76 pow = 0 77 End If 13 pow = ActiveBasic.Math.pow(x, y) 78 14 End Function 79 15 … … 89 25 _System_RndNext = dwSeek 90 26 End Sub 91 92 27 93 28 '------------- ここからBasic標準関数の定義 ------------- … … 154 89 '---------- 155 90 156 Function Abs(number As Double) As Double 157 'Abs = System.Math.Abs(number) 158 If number < 0 then159 Abs = -number 160 Else 161 Abs = number 162 End If163 End Function 164 165 Function Abs(n umberAs Int64) As Int64166 If number < 0 then167 Abs = -number 168 Else 169 Abs = number 170 End If171 End Function 172 173 Function Abs(n umber As Long) As Long174 If number < 0 then175 Abs = -number 176 Else 177 Abs = number 178 End If91 /* 92 Function Abs(n As Double) As Double 93 Abs = ActiveBasic.Math.Abs(n) 94 End Function 95 96 Function Abs(n As Single) As Single 97 Abs = ActiveBasic.Math.Abs(n) 98 End Function 99 100 Function Abs(n As Int64) As Int64 101 Abs = ActiveBasic.Math.Abs(n) 102 End Function 103 104 Function Abs(n As Long) As Long 105 Abs = ActiveBasic.Math.Abs(n) 106 End Function 107 108 Function Abs(n As Integer) As Integer 109 Abs = ActiveBasic.Math.Abs(n) 110 End Function 111 112 Function Abs(n As SByte) As SByte 113 Abs = ActiveBasic.Math.Abs(n) 179 114 End Function 180 115 181 116 Function Exp(x As Double) As Double 182 Exp = System.Math.Exp(x)117 Exp = ActiveBasic.Math.Exp(x) 183 118 End Function 184 119 185 120 Function Log(x As Double) As Double 186 Log = System.Math.Log(x)187 End Function 188 189 Function Sgn(n umberAs Double) As Long190 Sgn = System.Math.Sign(number)191 End Function 192 193 Function Sqr( numberAs Double) As Double194 Sqr = System.Math.Sqrt(number)195 End Function 196 197 Function Atn( numberAs Double) As Double198 Atn = System.Math.Atan(number)121 Log = ActiveBasic.Math.Log(x) 122 End Function 123 */ 124 Function Sgn(n As Double) As Long 125 ' Sgn = ActiveBasic..Math.Sign(n) 126 End Function 127 128 Function Sqr(x As Double) As Double 129 Sqr = ActiveBasic.Math.Sqrt(x) 130 End Function 131 132 Function Atn(x As Double) As Double 133 Atn = ActiveBasic.Math.Atan(x) 199 134 End Function 200 135 201 136 Function Atn2(y As Double, x As Double) As Double 202 Atn2 = System.Math.Atan2(y, x)203 End Function 204 205 Function Sin( numberAs Double) As Double206 Sin = System.Math.Sin(number)207 End Function 208 209 Function Cos( numberAs Double) As Double210 Cos = System.Math.Cos(number)211 End Function 212 213 Function Tan( numberAs Double) As Double214 Tan = System.Math.Tan(number)215 End Function 216 137 Atn2 = ActiveBasic.Math.Atan2(y, x) 138 End Function 139 /* 140 Function Sin(x As Double) As Double 141 Sin = ActiveBasic.Math.Sin(x) 142 End Function 143 144 Function Cos(x As Double) As Double 145 Cos = ActiveBasic.Math.Cos(x) 146 End Function 147 148 Function Tan(x As Double) As Double 149 Tan = ActiveBasic.Math.Tan(x) 150 End Function 151 */ 217 152 Const RAND_UNIT = (1.0 / (LONG_MAX + 1.0)) 218 153 Function Rnd() As Double
Note:
See TracChangeset
for help on using the changeset viewer.