Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPrivate Function ConvertToIEEE754(n As String) As Long Dim res As Long Dim value As Double Dim exponent As Integer res = 0 If Val(n) < 0 Then 'change bit 32 to 1 res = res Or &H80000000 End If value = Abs(Val(n)) exponent = 127 p = InStr(1, CStr(value), ".") If value >= 1 Then While Val(Mid(CStr(value), 1, p - 1)) > 1 value = value / 2 p = InStr(1, CStr(value), ".") exponent = exponent + 1 Wend End If If value < 1 Then While Val(Mid(CStr(value), 1, p - 1)) < 1 value = value * 2 p = InStr(1, CStr(value), ".") exponent = exponent - 1 Wend End If SetExponent exponent, res value = value - 1 SetMantissa value, res End Function Private Sub SetExponent(numbase10 As Integer, ByRef res As Long) Dim digit As Integer Dim count As Integer count = 0 While numbase10 > 0 digit = numbase10 Mod 2 If digit = 1 Then res = res Or (2 ^ (23 + count)) End If count = count + 1 numbase10 = numbase10 \ 2 Wend End Sub Private Sub SetMantissa(dec As Double, ByRef res As Long) Dim count As Integer count = 0 While count < 23 And dec <> 1 dec = dec * 2 If dec - 1 > 0 Then res = res Or (2 ^ count) End If count = count + 1 If dec > 1 Then dec = dec - 1 End If Wend End Sub
Private Function ConvertToIEEE754(n As String) As Long Dim res As Long Dim value As Double Dim exponent As Integer res = 0 If Val(n) < 0 Then 'change bit 32 to 1 res = res Or &H80000000 End If value = Abs(Val(n)) exponent = 127 If value >= 1 Then While value / 2 > 1 value = value / 2 exponent = exponent + 1 Wend Else While value < 1 value = value * 2 exponent = exponent - 1 Wend End If SetExponent exponent, res value = value - 1 SetMantissa value, res ConvertToIEEE754 = res End Function Private Sub SetExponent(numbase10 As Integer, ByRef res As Long) Dim digit As Integer Dim count As Integer count = 0 While numbase10 > 0 digit = numbase10 Mod 2 If digit = 1 Then res = res Or (2 ^ (23 + count)) End If count = count + 1 numbase10 = numbase10 \ 2 Wend End Sub Private Sub SetMantissa(dec As Double, ByRef res As Long) Dim count As Integer count = 22 While count >= 0 And dec <> 1 dec = dec * 2 If dec - 1 >= 0 Then res = res Or (2 ^ count) End If count = count - 1 If dec > 1 Then dec = dec - 1 End If Wend End Sub