Cómo representar el punto flotante en binario. IEEE -- floating-point campo con binary campo con decimal camp Relacionados El problema

How to represent floating point in binary. IEEE


3
vote

problema

Español

Similar a los números binarios decimales también pueden haber representado flotadores. Ahora leí que puede tener flotadores del tipo

0.5 : 0.1 , 0.256 : 0.01 , 0.125 : 0.001 ... y así sucesivamente. Pero, por ejemplo, ¿cómo es el 0.1 (en decimal) representado en binario?

también, dado un flotador decimal, cómo convertirlo al equivalente decimal, (dado que no es tan sencillo).

Editar: Así que entiendo que la mejor pregunta hubiera sido; ¿Cómo convertir un flotador decimal a binario? Ahora lo entiendo que multiplicamos la parte decimal, hasta que se convierta en cero. Ahora es muy posible que dos puntos flotantes puedan tener la misma representación, ¿verdad?

Original en ingles

Similar to decimal binary numbers can have represent floats too. Now I read that it can have floats of the sort

0.5:0.1 , 0.25:0.01 , 0.125:0.001 ... and so on. But then, for example, how is the 0.1(in decimal) represented in binary?

Also, given a decimal float, how to convert it to the decimal equivalent, (given it is not so straightforward).

Edit: So I understand that the better question would have been ; how to convert a decimal float to binary? Now i get it that we multiply the decimal part, till it becomes zero. Now it is very much possible that two floating points can have the same representation right?

        

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

Dado cuántos bits?

0.1b:

  0.00011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011...   

Como puedes ver, es una aproximación.

  Binary                                          Decimal 0.1     == 1/2^1         == 1/2              == 0.5 0.01    == 1/2^2         == 1/4              == 0.25 0.11    == 1/2^1 + 1/2^2 == 1/2 + 1/4 == 3/4 == 0.75   

Cada bit tras la el punto de radix representa 1/2 ^ (Position_After_Bit_String).

  postion:   |1|2|3|4|5|6|7|          0.|0|0|0|0|0|0|1|   

SO 0.0000001 = 1/2^7 = 0.0078125

Pseudocódigo:

  decimal_value = 0  for i, bit in enumerate(binary_string):     if bit == 1          decimal_value += 1/2**i   

Para obtener más información ¿Por qué no se pueden representar los números decimales? exactamente en binario?

 

Given how many bits?

0.1b:

0.00011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011... 

As you can see it's an approximation.

Binary                                          Decimal 0.1     == 1/2^1         == 1/2              == 0.5 0.01    == 1/2^2         == 1/4              == 0.25 0.11    == 1/2^1 + 1/2^2 == 1/2 + 1/4 == 3/4 == 0.75 

Each bit after the radix point represents 1/2^(position_after_bit_string).

postion:   |1|2|3|4|5|6|7|          0.|0|0|0|0|0|0|1| 

So 0.0000001 = 1/2^7 = 0.0078125

Pseudocode:

decimal_value = 0  for i, bit in enumerate(binary_string):     if bit == 1          decimal_value += 1/2**i 

For more info Why can't decimal numbers be represented exactly in binary?

 
 
     
     
0
 
vote

Otra observación que podría ser útil. La 'parte entera' de un número de punto flotante está presente en el binario en su forma 'normal', por ejemplo, si el valor es 25.7482, tendrá los bits '11001' (25) en el punto flotante, con los bits después de representar La fracción (en realidad, la primera '1' nunca se almacena, está implícita en el formato). Si restó 25.0 de ese número y se multiplica por 10, obtiene 7.482, y al examinar la parte entera de ese valor, puede obtener el primer dígito fraccional, '7'.

Restar 7.0, multiplicarse por 10 da 4.82, por lo tanto, el siguiente dígito '4', y así sucesivamente. Este proceso en teoría finalizará eventualmente con un resultado cero, ya que todos los valores que pueden representarse exactamente en formato de punto flotante tienen una representación decimal exacta; Sin embargo, ese resultado 'exacto' podría tener muchos más dígitos que en realidad razonables, dada la precisión del punto flotante original (y es posible que necesite precisión adicional para obtener ese resultado completamente exacto, de todos modos, debe asegurarse de que la multiplicación por 10 haga. no generar un error de redondeo).

y, para números como 6.432E-200, este método es viable pero no muy eficiente (estaría generando 199 ceros antes de que surgiera el primer '6').

 

Another observation that could be helpful. The 'integer part' of a floating point number is present in the binary in its 'normal' form, for instance if the value is 25.7482 you will have the bits '11001' (25) in the floating point, with the bits following representing the fraction (actually the first '1' is never stored, it's implied in the format). If you subtract 25.0 from that number, and multiply by 10, you get 7.482, and by examining the integer part of that value, you can obtain the first fractional digit, '7'.

Subtract 7.0, multiply by 10 gives 4.82 , thus the next digit '4', and so on. This process will in theory end eventually with a zero result, since all values that can be exactly represented in floating-point format have an exact decimal representation; however, that 'exact' result could have far more digits than are actually reasonable given the precision of the original floating point (and you may need extra precision internally to obtain that fully exact result, anyhow - you need to ensure the multiplication by 10 does not generate a rounding error).

And, for numbers like 6.432e-200 ,this method is workable but not very efficient (you'd be generating 199 zeros before the first '6' emerged).

 
 

Relacionados problema

0  ¿Convertir cadena de inicio con 0 a 2 decimal lugar asp.net?  ( Convert string start with 0 to 2 decimal place asp net ) 
Tengo esta cadena: Dim value as String = "0.11209176170341301" e intenté usar este código para convertir la cadena en decimal con dos lugares: Dim v...

3  Configuración de bits específicos en un número  ( Setting specific bits in a number ) 
var d = 7; en binario: 7 = (111) Lo que quiero hacer es configurar el segundo lugar de derecha a 1 o 0 a disposición, y devolver el valor decimal. Por...

1  Multiplicar, restar y dividir números binarios dan respuestas incorrectas  ( Multiplying subtracting and dividing binary numbers give wrong answers ) 
Estoy haciendo una aplicación de calculadora binaria. No hay problemas de construcción, pero en la aplicación, solo agregar números binarios, dan la respuesta...

2  Entrada Xamarin.Forms con automóviles miles y separadores decimales  ( Xamarin forms entry with auto thousand and decimal separator ) 
Tengo una entrada de Xamarin.Forms con teclado numérico que representará una moneda real de PT -R (999.999,99). Cuando escribo los números en el teclado numér...

-1  Puntos decimales de Java  ( Java decimal points ) 
Mi pregunta es: ¿Cómo hago que el programa imprima el número de dígitos antes del punto decimal y cuántos vienen después de un número? public class Strin...

13  Decimal aleatorio en Python  ( Random decimal in python ) 
¿Cómo obtengo un aleatorio decimal.Decimal instancia? Parece que el módulo aleatorio solo devuelve los flotadores que son un pita para convertir a decimal...

1  Entrada regional del separador decimal [cerrado]  ( Regional decimal seperator input ) 
cerrado . Esta pregunta debe ser más enfocado . Actualmente no está aceptando respuestas. ...

2  Python decimal desesperadamente simple  ( Desperately simple python decimal ) 
Hola, necesito ayuda por favor. Quiero calcular los números de flotador con un formato como xxxxx.yyyyyyyyyyyyyyy. He aprendido que debería usar decimal en lu...

12  Implementaciones de protocolo duplicado en proyectos dependientes  ( Duplicate protocol implementations in dependent projects ) 
Tengo problemas con la consolidación de la implementación del protocolo en mi proyecto Elixir. Para ser más específico, utilizo Ecto y algún proyecto simple...

701  Cómo convertir decimal a doblarse en C #  ( How to convert decimal to double in c sharp ) 
Quiero usar un Track-Bar para cambiar una opacidad double1 . Este es mi código: decimal trans = trackBar1.Value / 5000; this.Opacity = trans; Cuan...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos