verilog - ¿Cuánto tiene la representación de punto fijo binario de precisión xxx?
(1)
De una pregunta similar tenemos:
Base 2: Dos complementan 4 enteros, fraccional de 4 bits
-2^3 2^2 2^1 2^0 . 2^-1 2^-2 2^-3 2^-4
-8 4 2 1 . 0.5 0.25 0.125 0.0625
Con solo 4 bits fraccionarios, el número representado solo tiene una precisión de 0.0625
3.575 could be 11.1001 = 2+ 1+ 0.5 + 0.0625 => 3.5625 to low
or 11.1010 = 2+ 1+ 0.5 + 0.125 => 3.625 to high
Esto debería indicar que 4 bits no son suficientes para representar "3.575" exactamente.
Para calcular cuántos bits necesitaría multiplicar por una potencia de 2 hasta obtener un número entero: para "3.575" es bastante (50 bits fraccionarios).
3.575 * 2^2 = 14.3 (not integer)
3.575 * 2^20 = 3748659.2
3.575 * 2^30 = 3838627020.8
3.575 * 2^40 = 3930754069299.2 (not integer)
3.575 * 2^50 = 4025092166962381.0 (INTEGER) we need 50 bits!
3.575 => 11.10010011001100110011001100110011001100110011001101
Multiplicar por una potencia de dos desplaza la palabra hacia la izquierda (
<<
) Cuando no quedan bits fraccionarios, significa que el número está totalmente representado, entonces el número de desplazamientos es el número de bits fraccionarios requeridos.
Para un punto fijo, es mejor pensar en el nivel de precisión que requiere su aplicación.
Estoy tratando de medir la cantidad de precisión cuando convierto a la forma de representación de punto fijo binario. Primero intenté usar este 0.9375. Y obtuve el binario 0.1111. segundo intenté usar este 0.9377 y también obtuve el binario 0.1111
No hay nada diferente entre ellos.
Además, ¿cómo puedo resolver este problema? ¿Hay alguna otra manera? Para hacer la conversión?
Para su comprensión, me dejo un ejemplo más, por ejemplo, si quiero convertir 3.575 a binario, entonces 3.575 sea 11.1001. pero si regreso de nuevo a decimal, entonces 3.5625. Es muy diferente en valor original.