Programación Específica > Soluciones de Hard y Soft

 Float Formato Microchip En Vb

(1/1)

Huguen_aus_Tirol:
Hola a todos! Después de algún tiempo, hoy me encuentro algo generoso, asi que quiero compartirlo con ustedes... Aquí van unas funciones para VB que nos permiten, una convertir un numero binario en formato float de Microchip a su equivalente real, y las otras dos la inversa. Son dos, una para calcular el exponente, y la otra para la mantisa. Espero les sirva... :)
Más información en la página de Microchip (Hace falta decirlo? ;) )
Ah!!! Gracias Jonathan por la respuesta en el foro de VB; si bien no era la solución a mi problema, sí me sirvió muy bien para encarar el problema y ya está solucionado. Muchas gracias!


--- Código: Text --- 'Funcion que convierte un numero en formato float a realPublic Function Hex_Float(Exp As Integer, Mantisa As Long) As Single    Dim Sign As Boolean    Dim Man_bin(23) As Byte    Dim i As Byte    Dim Res_float As Single        'determino exponente, en base a 0x7F    Exp = Exp - &H7F        'Extraigo signo    If Mantisa >= &H800000 Then        Sign = True    Else        Sign = False    End If        'Normalizo a 1.xxx    Mantisa = Mantisa Or &H800000            'Convierto a real    i = 23    Do        Man_bin(i) = Mantisa Mod 2        If Man_bin(i) = 1 Then            Res_float = Res_float + 2 ^ (-1 * i)        End If        Mantisa = Mantisa \ 2        i = i - 1    Loop While Mantisa > 1    Man_bin(i) = Mantisa    Res_float = Res_float + 2 ^ (-1 * i)        'Signo?    If Sign Then        Res_float = -1 * Res_float    End If        'Multiplico por el exponente    Res_float = Res_float * (2 ^ Exp)        Hex_Float = Res_float    End Function  

--- Código: Text --- 'Funcion que devuelve la mantisa de un numero realPublic Function Float_Mantisa(Num As Single) As Long    Dim Exp As Integer    Dim Normalize As Single    Dim Bin(23) As Byte    Dim i As Byte    Dim aux As Long    'Obtengo el exponente    Exp = Float_Exp(Num)    Exp = Exp - &H7F    'Normalizo    Normalize = Abs(Num) / (2 ^ Exp)    'Convierto en array binario (24bits)    For i = 0 To 23        If Normalize >= 2 ^ (-1 * i) Then            Bin(i) = 1        Else            Bin(i) = 0        End If        Normalize = Normalize - (Bin(i) * 2 ^ (-1 * i))    Next    'Convierto array binario en valor de la mantisa    aux = 0    Bin(0) = 0    For i = 0 To 23        aux = aux + Bin(23 - i) * 2 ^ i    Next 'Determino el signo    If Num < 0 Then        aux = aux Or &H800000    End If        Float_Mantisa = aux    End Function'Funcion que determina el exponente de un numero realPublic Function Float_Exp(Num As Single) As Byte            Float_Exp = Int(Log(Abs(Num)) / Log(2)) + &H7F    End Function  

Navegación

[0] Índice de Mensajes

Ir a la versión completa