• Domingo 22 de Diciembre de 2024, 22:43

Autor Tema:  Float Formato Microchip En Vb  (Leído 3421 veces)

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Float Formato Microchip En Vb
« en: Jueves 26 de Octubre de 2006, 23:53 »
0
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
  1.  
  2. 'Funcion que convierte un numero en formato float a real
  3. Public Function Hex_Float(Exp As Integer, Mantisa As Long) As Single
  4.     Dim Sign As Boolean
  5.     Dim Man_bin(23) As Byte
  6.     Dim i As Byte
  7.     Dim Res_float As Single
  8.    
  9.     'determino exponente, en base a 0x7F
  10.     Exp = Exp - &H7F
  11.    
  12.     'Extraigo signo
  13.     If Mantisa >= &H800000 Then
  14.         Sign = True
  15.     Else
  16.         Sign = False
  17.     End If
  18.    
  19.     'Normalizo a 1.xxx
  20.     Mantisa = Mantisa Or &H800000
  21.        
  22.     'Convierto a real
  23.     i = 23
  24.     Do
  25.         Man_bin(i) = Mantisa Mod 2
  26.         If Man_bin(i) = 1 Then
  27.             Res_float = Res_float + 2 ^ (-1 * i)
  28.         End If
  29.         Mantisa = Mantisa \ 2
  30.         i = i - 1
  31.     Loop While Mantisa > 1
  32.     Man_bin(i) = Mantisa
  33.     Res_float = Res_float + 2 ^ (-1 * i)
  34.    
  35.     'Signo?
  36.     If Sign Then
  37.         Res_float = -1 * Res_float
  38.     End If
  39.    
  40.     'Multiplico por el exponente
  41.     Res_float = Res_float * (2 ^ Exp)
  42.    
  43.     Hex_Float = Res_float
  44.    
  45. End Function
  46.  
  47.  

Código: Text
  1.  
  2. 'Funcion que devuelve la mantisa de un numero real
  3. Public Function Float_Mantisa(Num As Single) As Long
  4.     Dim Exp As Integer
  5.     Dim Normalize As Single
  6.     Dim Bin(23) As Byte
  7.     Dim i As Byte
  8.     Dim aux As Long
  9.    
  10. 'Obtengo el exponente
  11.     Exp = Float_Exp(Num)
  12.     Exp = Exp - &H7F
  13.    
  14. 'Normalizo
  15.     Normalize = Abs(Num) / (2 ^ Exp)
  16.    
  17. 'Convierto en array binario (24bits)
  18.     For i = 0 To 23
  19.         If Normalize >= 2 ^ (-1 * i) Then
  20.             Bin(i) = 1
  21.         Else
  22.             Bin(i) = 0
  23.         End If
  24.         Normalize = Normalize - (Bin(i) * 2 ^ (-1 * i))
  25.     Next
  26.    
  27. 'Convierto array binario en valor de la mantisa
  28.     aux = 0
  29.     Bin(0) = 0
  30.     For i = 0 To 23
  31.         aux = aux + Bin(23 - i) * 2 ^ i
  32.     Next
  33.  
  34. 'Determino el signo
  35.     If Num < 0 Then
  36.         aux = aux Or &H800000
  37.     End If
  38.    
  39.     Float_Mantisa = aux
  40.    
  41. End Function
  42. 'Funcion que determina el exponente de un numero real
  43. Public Function Float_Exp(Num As Single) As Byte
  44.        
  45.     Float_Exp = Int(Log(Abs(Num)) / Log(2)) + &H7F
  46.    
  47. End Function
  48.  
  49.