En informática , una representación numérica de coma fija es un tipo de datos real para un número que tiene un número fijo de dígitos después (y a veces también antes) del punto de base (después del punto decimal '.' En notación decimal inglesa). La representación de números de punto fijo se puede comparar con la representación de números de punto flotante más complicada (y más exigente desde el punto de vista computacional) .
Los números de punto fijo son útiles para representar valores fraccionarios , generalmente en base 2 o base 10, cuando el procesador en ejecución no tiene una unidad de punto flotante (FPU) como es el caso de los microprocesadores y microcontroladores integrados más antiguos o de bajo costo , si son de punto fijo proporciona un mejor rendimiento o precisión para la aplicación en cuestión, o si su uso es más natural para el problema (como para la representación de ángulos ).
Representación
Valor mostrado | Entero manejado internamente |
---|---|
0,00 | 0 |
0,01 | 1 |
0,02 | 2 |
... | |
0,99 | 99 |
1,00 | 100 |
Un valor de un tipo de datos de punto fijo es esencialmente un número entero que se escala mediante un factor específico implícito determinado por el tipo. Por ejemplo, el valor 1,23 se puede representar como 1230 en un tipo de datos de punto fijo con un factor de escala de 1/1000, y el valor 1,230,000 se puede representar como 1230 con un factor de escala de 1000. A diferencia de los tipos de datos de punto flotante, el El factor de escala es el mismo para todos los valores del mismo tipo y no cambia durante todo el cálculo.
El factor de escala suele ser una potencia de 10 (para conveniencia humana) o una potencia de 2 (para eficiencia computacional). Sin embargo, pueden usarse ocasionalmente otros factores de escala, por ejemplo, un valor de tiempo en horas puede representarse como un tipo de punto fijo con un factor de escala de 1/3600 para obtener valores con una precisión de un segundo.
El valor máximo de un tipo de punto fijo es simplemente el valor más grande que se puede representar en el tipo entero subyacente multiplicado por el factor de escala; y lo mismo para el valor mínimo.
Operaciones
Para convertir un número de un tipo de punto fijo con factor de escala R a otro tipo con factor de escala S , el entero subyacente debe multiplicarse por R y dividirse por S ; es decir, multiplicada por la relación R / S . Así, por ejemplo, para convertir el valor 1.23 = 123/100 de un tipo con factor de escala R = 1/100 a uno con factor de escala S = 1/1000 , el entero subyacente 123 debe multiplicarse por (1/100) / (1/1000) = 10, dando la representación 1230/1000. Si S no divide R (en particular, si el nuevo factor de escala S es mayor que el R original ), el nuevo entero tendrá que redondearse . Las reglas y métodos de redondeo suelen ser parte de la especificación del lenguaje.
Para sumar o restar dos valores del mismo tipo de punto fijo, es suficiente sumar o restar los enteros subyacentes y mantener su factor de escala común. El resultado se puede representar exactamente en el mismo tipo, siempre que no se produzca un desbordamiento (es decir, siempre que la suma de los dos enteros encaje en el tipo entero subyacente). Si los números tienen diferentes tipos de punto fijo, con diferentes factores de escala, entonces uno de ellos debe convertirse al otro antes de la suma.
Para multiplicar dos números de coma fija, basta con multiplicar los dos enteros subyacentes y asumir que el factor de escala del resultado es el producto de sus factores de escala. Esta operación no implica redondeo. Por ejemplo, multiplicar los números 123 escalados por 1/1000 (0,123) y 25 escalados por 1/10 (2,5) da como resultado el entero 123 × 25 = 3075 escalado por (1/1000) × (1/10) = 1/10000 , eso es 3075/10000 = 0,3075. Si los dos operandos pertenecen al mismo tipo de coma fija, y el resultado también se va a representar en ese tipo, entonces el producto de los dos enteros debe multiplicarse explícitamente por el factor de escala común; en este caso, el resultado puede tener que redondearse y puede producirse un desbordamiento. Por ejemplo, si el factor de escala común es 1/100, multiplicar 1,23 por 0,25 implica multiplicar 123 por 25 para obtener 3075 con un factor de escala intermedio de 1/10000. Esto debe multiplicarse por 1/100 para obtener 31 (0,31) o 30 (0,30), según el método de redondeo utilizado, para obtener un factor de escala final de 1/100.
Para dividir dos números de coma fija, se toma el cociente de sus números enteros subyacentes y se supone que el factor de escala es el cociente de sus factores de escala. La primera división implica redondeo en general. Por ejemplo, la división de 3456 escalada por 1/100 (34,56) y 1234 escalada por 1/1000 (1,234) da como resultado el entero 3456 ÷ 1234 = 3 (redondeado) con factor de escala (1/100) / (1/1000) = 10, es decir, 30. Se puede obtener un resultado más preciso convirtiendo primero el dividendo a un tipo más preciso: en el mismo ejemplo, convirtiendo 3456 escalado por 1/100 (34.56) a 3,456,000 escalado por 1/100000, antes de dividir por 1234 escalado por 1/1000 (1.234), produciría 3456000 ÷ 1234 = 2801 (redondeado) con factor de escala (1/100000) / (1/1000) = 1/100, es decir 28.01 (en lugar de 30). Si ambos operandos y el resultado deseado tienen el mismo factor de escala, entonces el cociente de los dos enteros debe multiplicarse explícitamente por ese factor de escala común.
Binario vs decimal
Las dos clases más comunes de tipos de coma fija son decimal y binario. Los tipos decimales de coma fija tienen un factor de escala que es una potencia de diez; para los tipos binarios de coma fija es una potencia de dos.
Los tipos binarios de punto fijo se utilizan con mayor frecuencia, porque las operaciones de cambio de escala se pueden implementar como cambios rápidos de bits . Los números binarios de coma fija pueden representar potencias fraccionarias de dos exactamente, pero, como los números binarios de coma flotante, no pueden representar exactamente potencias fraccionarias de diez. Si se desean potencias fraccionarias exactas de diez, se debe utilizar un formato decimal. Por ejemplo, un décimo (0.1) y un centésimo (0.01) se pueden representar solo aproximadamente mediante representaciones binarias de coma fija o coma flotante binaria, mientras que pueden representarse exactamente en representaciones decimales de coma fija o decimal de coma flotante. . Estas representaciones se pueden codificar de muchas formas, incluido el decimal codificado en binario (BCD).
Un ejemplo trabajado
Suponga que existe la siguiente multiplicación con 2 números de coma fija y 3 decimales.
(10.500) (1.050) = 1 * 10.500 + 0.050 * 10.500 = 10.500 + 0.525000 = 11.025000
Tenga en cuenta que, dado que hay 3 lugares decimales, mostramos los ceros finales. Para volver a caracterizar esto como una multiplicación de enteros, primero debemos multiplicar por 1000 (10 ^ 3) moviendo todos los lugares decimales a lugares enteros, luego multiplicaremos por (10 ^ -3) para devolverlos, la ecuación ahora se ve así
(10.500) (10 ^ (3)) (10 ^ (- 3)) (1.050) (10 ^ (3)) (10 ^ (- 3)) (10 ^ (- 3)) (10 ^ (- 3) ))= (10500) (1050) (10 ^ -6)= 11025 000= 11,025000
Esto funciona de manera equivalente si elegimos una base diferente, en particular la base 2 para calcular, ya que un desplazamiento de bits es lo mismo que una multiplicación o división por un orden de 2. Tres dígitos decimales equivalen a aproximadamente 10 dígitos binarios, por lo que debemos redondear 0.05 a 10 bits después del punto binario. La aproximación más cercana es 0.0000110011.
10 = 8 + 2 = 2 ^ 3 + 2 ^ 11 = 2 ^ 00.5 = 2 ^ -10.05 = 0.0000110011_2
Así nuestra multiplicación se convierte en
(1010.100) (2 ^ 3) (1.0000110011) (2 ^ 10) (2 ^ -13)= (1010100) (10000110011) (2 ^ -13)= (10110000010111100) (2 ^ -13)= 1011,0000010111100
Esto se redondea a 11.023 con tres dígitos después del punto decimal.
Notación
Hay varias notaciones que se utilizan para representar la longitud de la palabra y el punto de base en un número binario de coma fija. En la siguiente lista, f representa el número de bits fraccionarios, m el número de bits de magnitud o enteros, s el número de bits de signo yb el número total de bits.
- Q f : El prefijo "Q". Por ejemplo, Q15 representa un número con 15 bits fraccionarios. Esta notación es ambigua ya que no especifica la longitud de la palabra; sin embargo, generalmente se supone que la longitud de la palabra es de 16 o 32 bits, dependiendo del procesador de destino que se utilice. [1]
- Q m . f : La forma inequívoca de la notación "Q". Dado que la palabra completa es un entero en complemento a 2, se implica un bit de signo. Por ejemplo, Q1.30 describe un número con 1 bit entero y 30 bits fraccionarios almacenados como un entero de complemento a 2 de 32 bits. [1] [2]
- fx m . b : El prefijo "fx" es similar al anterior, pero utiliza la longitud de la palabra como segundo elemento del par de puntos. Por ejemplo, fx1.16 describe un número con 1 bit de magnitud y 15 bits fraccionarios en una palabra de 16 bits. [3]
- s : m : f : Sin embargo, otras notaciones incluyen un bit de signo, como este que se usa en la Guía del usuario de PS2 GS. [4] También se diferencia del uso convencional al utilizar dos puntos en lugar de un punto como separador. Por ejemplo, en esta notación, 0: 8: 0 representa un entero de 8 bits sin signo.
- (p, q) Se utiliza en el lenguaje de programación PL / I , para especificar p dígitos totales (sin incluir el signo) con q después del punto de base. q puede ser positivo o negativo, y la base binaria o decimal.
,> Como se usa con el lenguaje de programación LabVIEW, para números de punto fijo 'FXP'. Donde s es + o ±, lo que significa un número sin signo o con signo en complemento a 2, respectivamente. Este formato indica p dígitos totales, siendo i la 'parte entera'. Es notable que este formato permite la ubicación arbitraria del lugar de las 'unidades', que no es necesario que ocurra dentro de los dígitos dados. Es decir; mientras que el total de bits p debe ser un entero natural, i puede ser mayor, cero o incluso negativo; estas situaciones simplemente corresponden a diferentes factores de escala generales para el número.
Escala binaria
El escalado binario es una técnica de programación informática que se utiliza normalmente en programas C , DSP y ensamblador integrados para implementar operaciones no enteras mediante la aritmética de enteros nativa del procesador.
Descripción general
Una representación de un valor mediante escalado binario es más precisa que una representación de punto flotante que ocupa el mismo número de bits, pero normalmente representa valores de un rango más limitado, lo que conduce más fácilmente a un desbordamiento aritmético durante el cálculo. La implementación de operaciones usando instrucciones aritméticas enteras es a menudo (pero no siempre) más rápida que las correspondientes instrucciones de punto flotante.
Se elige una posición para el 'punto binario' para cada variable que se va a representar, y los cambios binarios asociados con las operaciones aritméticas se ajustan en consecuencia. La escala binaria corresponde en Q (formato numérico) al primer dígito, es decir, Q1.15 es un entero de 16 bits escalado con un bit como entero y quince como fraccionario. Un número de Bscal 1 o Q1.15 representaría aproximadamente 0.999 a -1.0.
Para dar un ejemplo, una forma común de usar aritmética de enteros para simular un punto flotante, usando números de 32 bits, es multiplicar los coeficientes por 65536.
Usando notación científica binaria , esto colocará el punto binario en B16. Es decir, los 16 bits más significativos representan la parte entera y el resto representa la parte fraccionaria. Esto significa que, como un número entero B16 en complemento a dos con signo, puede contener un valor más alto dey un valor más bajo de -32768.0. Dicho de otra manera, el número B es el número de bits enteros que se utilizan para representar el número que define su rango de valores. Los bits bajos restantes (es decir, los bits que no son enteros) se utilizan para almacenar cantidades fraccionarias y proporcionar más precisión.
Por ejemplo, para representar 1.2 y 5.6 como B16, uno los multiplica por 2 16 , dando 78643 y 367001 como las representaciones B16 más cercanas.
Multiplicar estos juntos da
28862059643
Para volver a convertirlo en B16, divídelo entre 2 16 y redondea.
Esto da 440400B16, que cuando se convierte de nuevo a un número decimal (dividiendo de nuevo por 2 16 ) da 6,71997 aproximadamente. El resultado correcto es 6,72.
Cambio de escala después de la multiplicación
El ejemplo anterior para una multiplicación B16 es un ejemplo simplificado. El cambio de escala depende tanto del valor de la escala B como del tamaño de la palabra. B16 se utiliza a menudo en sistemas de 32 bits porque funciona simplemente multiplicando y dividiendo por 65536 (o desplazando 16 bits).
Considere el punto binario en una palabra de 32 bits con signo así:
0 1 2 3 4 5 6 7 8 9 SXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX
donde S es el bit de signo y X son los otros bits.
Colocando el punto binario en
- 0 da un rango de -1,0 a 0,999999.
- 1 da un rango de −2.0 a 1.999999
- 2 da un rango de -4.0 a 3.999999 y así sucesivamente.
Al usar diferentes escalas B y / o tamaños de palabras, se debe usar la fórmula de conversión de escala B completa.
Considere un tamaño de palabra de 32 bits y dos variables, una con una escala B de 2 y la otra con una escala de 4.
1.4 @ B2 es 1.4 * (2 ^ (tamaño de palabras-2-1)) == 1.4 * 2 ^ 29 == 0x2CCCCCCD
Tenga en cuenta que aquí los valores de 1.4 están muy bien representados con 30 bits de fracción. Un número de coma flotante de 32 bits tiene 23 bits para almacenar la fracción. Esta es la razón por la que la escala B es siempre más precisa que la coma flotante del mismo tamaño de palabra. Esto es especialmente útil en integradores o sumas repetidas de pequeñas cantidades donde el error de redondeo puede ser un problema sutil pero muy peligroso cuando se usa punto flotante.
Ahora un número mayor 15,2 en B4.
15.2 @ B4 es 15.2 * (2 ^ (wordize-4-1)) == 15.2 * 2 ^ 27 == 0x7999999A
El número de bits para almacenar la fracción es de 28 bits. Al multiplicar estos números de 32 bits se obtiene el resultado de 64 bits 0x1547AE14A51EB852
Este resultado está en B7 en una palabra de 64 bits. Desplazándolo hacia abajo en 32 bits da el resultado en B7 en 32 bits.
0x1547AE14
Para volver a convertir a un número real, divida esto entre (2^(wordsize-7-1))
, resultando en 21.2800000099
.
Se pueden utilizar varias escalas. B0, por ejemplo, se puede utilizar para representar cualquier número entre -1 y 0,999999999.
Ángulos binarios
Los ángulos binarios se mapean usando B0, con 0 como 0 grados, 0,5 como 90 ° (o ), −1.0 o 0.9999999 como 180 ° (o π rad), y −0.5 como 270 ° (o). Cuando estos ángulos binarios se suman usando matemáticas normales en complemento a dos , la rotación de los ángulos es correcta, incluso cuando se cruza el límite del signo; esto convenientemente elimina las verificaciones de ángulos ≥ 360 ° cuando se manejan ángulos ordinarios [5] (los datos que permiten ángulos con más de una rotación deben usar alguna otra codificación).
Los términos medición angular binaria ( BAM ) [6] y sistema de medición angular binaria ( BAMS ) [7] , así como brads ( radianes binarios o grados binarios ) se refieren a implementaciones de ángulos binarios. Encuentran uso en robótica, navegación, [8] juegos de computadora, [9] y sensores digitales. [10]
No importa qué patrón de bits se almacene en un ángulo binario, cuando se multiplica por 180 ° (o π rad) usando aritmética estándar de punto fijo con signo , el resultado es siempre un ángulo válido en el rango de −180 grados ( −π radianes ) a +180 grados ( + π radianes). En algunos casos, es conveniente utilizar la multiplicación sin signo (en lugar de la multiplicación con signo) en un ángulo binario, lo que da el ángulo correcto en el rango de 0 a +360 grados ( + 2π radianes o +1 giro ). En comparación con el almacenamiento de ángulos en un formato de ángulo binario, el almacenamiento de ángulos en cualquier otro formato inevitablemente da como resultado algunos patrones de bits que dan "ángulos" fuera de ese rango, lo que requiere pasos adicionales para reducir el valor al rango deseado o dar como resultado algunos patrones de bits. que no son ángulos válidos en absoluto ( NaN ), o ambos.
Aplicación de técnicas de escalado binario
Las técnicas de escalado binario se utilizaron en las décadas de 1970 y 1980 para la computación en tiempo real que era matemáticamente intensiva, como la simulación de vuelo y los algoritmos de control de centrales nucleares desde finales de la década de 1960. El código a menudo se comentaba con las escalas binarias de los resultados intermedios de las ecuaciones.
El escalado binario todavía se usa en muchas aplicaciones DSP y los microprocesadores hechos a medida se basan generalmente en técnicas de escalado binario. La medición angular binaria se utiliza en los coprocesadores CORDIC integrados de la serie STM32G4 .
La escala binaria se usa actualmente en el DCT que se usa para comprimir imágenes JPEG en utilidades como GIMP .
Aunque el punto flotante se ha hecho cargo en gran medida, donde se requiere velocidad y precisión adicional, el escalado binario funciona en hardware más simple y es más preciso cuando el rango de valores se conoce de antemano y es suficientemente limitado. Esto se debe a que todos los bits en un entero binario escalado se usan para la precisión del valor (aunque puede haber ceros a la izquierda si el rango de valores es grande), mientras que en el punto flotante, algunos bits se usan para definir la escala.
Pérdida y desbordamiento de precisión
Debido a que las operaciones de punto fijo pueden producir resultados que tienen más dígitos que los operandos , es posible que se pierda información. Por ejemplo, el resultado de la multiplicación de punto fijo podría tener tantos dígitos como la suma de la cantidad de dígitos en los dos operandos. Para ajustar el resultado en el mismo número de dígitos que los operandos, la respuesta debe redondearse o truncarse . Si este es el caso, la elección de qué dígitos conservar es muy importante. Al multiplicar dos números de coma fija con el mismo formato, por ejemplo con dígitos enteros y dígitos fraccionarios, la respuesta podría tener hasta dígitos enteros y dígitos fraccionarios.
Para simplificar, muchos procedimientos de multiplicación de coma fija utilizan el mismo formato de resultado que los operandos. Esto tiene el efecto de mantener los dígitos medios; el número I de los dígitos enteros menos significativos y el número Q de los dígitos fraccionarios más significativos. Los dígitos fraccionarios perdidos por debajo de este valor representan una pérdida de precisión que es común en la multiplicación fraccionaria. Sin embargo, si se pierde algún dígito entero, el valor será radicalmente inexacto. Algunos paquetes de punto fijo basados en modelos [11] permiten especificar un formato de resultado diferente de los formatos de entrada, lo que permite al usuario maximizar la precisión y evitar el desbordamiento.
Algunas operaciones, como dividir, a menudo tienen una limitación de resultados incorporada, de modo que cualquier desbordamiento positivo da como resultado el mayor número posible que se puede representar con el formato actual. Del mismo modo, el desbordamiento negativo da como resultado el mayor número negativo representado por el formato actual. Esta limitación incorporada a menudo se denomina saturación .
Algunos procesadores admiten un indicador de desbordamiento de hardware que puede generar una excepción en caso de desbordamiento, pero generalmente es demasiado tarde para recuperar el resultado adecuado en este punto.
Implementaciones de lenguaje informático
Muy pocos lenguajes de computadora incluyen soporte integrado para valores de punto fijo que no sean con el punto de base inmediatamente a la derecha del dígito menos significativo (es decir, un número entero ), porque para la mayoría de las aplicaciones, las representaciones de punto flotante binario o decimal suelen ser más fáciles de usar. y lo suficientemente precisa. Las representaciones de punto flotante son más fáciles de usar que las representaciones de punto fijo, porque pueden manejar un rango dinámico más amplio y no requieren que los programadores especifiquen el número de dígitos después del punto de base. Sin embargo, si son necesarios, los números de punto fijo se pueden implementar incluso en lenguajes de programación como C y C ++ , que comúnmente no incluyen dicho soporte.
Un uso común de los números BCD de coma fija es para almacenar valores monetarios, donde los valores inexactos de los números binarios de coma flotante son a menudo un riesgo. Históricamente, las representaciones de punto fijo eran la norma para los tipos de datos decimales; por ejemplo, en PL / I o COBOL . El lenguaje de programación Ada incluye soporte integrado para coma fija (binaria y decimal) y coma flotante. JOVIAL y Coral 66 también proporcionan tipos de punto fijo y flotante.
ISO / IEC TR 18037 [12] especifica tipos de datos de punto fijo para el lenguaje de programación C; Se espera que los proveedores implementen las extensiones de lenguaje para aritmética de punto fijo en los próximos años. El soporte de punto fijo se implementa en GCC . [13] [14]
El punto fijo no debe confundirse con el punto flotante decimal en lenguajes de programación como C # y Python .
Casi todas las bases de datos relacionales y SQL admiten aritmética decimal de coma fija y almacenamiento de números. PostgreSQL tiene un especialnuméricoescriba para el almacenamiento exacto de números de hasta 1000 dígitos. [15]
Ejemplos de aplicaciones de software
- La biblioteca de utilidades de Nest Labs proporciona un conjunto limitado de macros y funciones para números de punto fijo, particularmente cuando se trata de esos números en el contexto del muestreo del sensor y las salidas del sensor.
- GnuCash es una aplicación para rastrear dinero que está escrita en C. Pasó de una representación de dinero de punto flotante a una implementación de punto fijo a partir de la versión 1.6. Este cambio se realizó para intercambiar los errores de redondeo menos predecibles de las representaciones de punto flotante por un mayor control sobre el redondeo (por ejemplo, al centavo más cercano ).
- Tremor , Toast y MAD son bibliotecas de software que decodifican los formatos de audio Ogg Vorbis , GSM Full Rate y MP3 , respectivamente. Estos códecs usan aritmética de punto fijo porque muchos dispositivos de hardware de decodificación de audio no tienen una FPU (en parte para ahorrar dinero, pero principalmente para ahorrar energía; las unidades enteras son mucho más pequeñas en el área de silicio que una FPU) y la decodificación de audio requiere rendimiento en la medida en que una implementación de software de punto flotante en dispositivos de baja velocidad no produciría salida en tiempo real.
- Todos los motores de gráficos 3D de los sistemas de videojuegos PlayStation original de Sony , Saturn de Sega , Game Boy Advance de Nintendo (solo 2D ), Nintendo DS (2D y 3D), Nintendo Gamecube [16] y GP2X Wiz utilizan aritmética de punto fijo por la misma razón que Tremor y Toast: para ganar rendimiento en una arquitectura sin FPU (por ejemplo, la PlayStation incluyó soporte de hardware para valores de 4.12bit en su coprocesador de transformación).
- La especificación OpenGL ES 1.x incluye un perfil de punto fijo, ya que es una API destinada a sistemas embebidos, que no siempre tienen una FPU.
- TeX utiliza un punto fijo con 16 bits después del punto binario, en unidades de puntos , para todos los cálculos de posición. Los archivos de métricas de fuentes TeX utilizan números de coma fija con signo de 32 bits, con 12 bits a la izquierda del decimal.
- Los programas dc y bc son calculadoras de precisión arbitrarias , pero solo mantienen un registro de un número fijo (especificado por el usuario) de dígitos fraccionarios.
- VisSim Un lenguaje de diagrama de bloques programado visualmente que admite un conjunto de bloques de punto fijo para permitir la simulación y la generación automática de códigos de operaciones de punto fijo. Tanto el tamaño de la palabra como el punto de base se pueden especificar según el operador.
- Fractint representa los números como números de punto fijo Q2.29 , [17] para acelerar el dibujo en PC antiguas con procesadores 386 o 486SX , que carecían de FPU.
- Doom fue el últimotítulo de disparos en primera persona de id Software en usar una representación de punto fijo de 16.16 para todos sus cálculos no enteros, incluido el sistema de mapas, la geometría, la representación, el movimiento del jugador, etc. reproducible en CPU 386 y 486SX sin una FPU. Por razones de compatibilidad, esta representación todavía se usa en los puertos de origen modernos de Doom .
- Wavpack es un compresor de audio de punto fijo y sin pérdidas. Su creador, David Bryant, justifica la decisión de implementar un punto fijo en lugar de un punto flotante: "Creo que las operaciones con enteros son menos susceptibles a variaciones sutiles de chip a chip que podrían corromper la naturaleza sin pérdidas de la compresión". [18]
- Los números de punto fijo se utilizan a veces para almacenar y manipular imágenes y fotogramas de vídeo. Los procesadores con unidades SIMD destinadas al procesamiento de imágenes pueden incluir instrucciones adecuadas para manejar datos empaquetados de punto fijo.
- El lenguaje de programación Q # para las computadoras cuánticas de Azure , que implementan puertas lógicas cuánticas , contiene una biblioteca numérica estándar para realizar aritmética de punto fijo en registros de qubits . [19]
- El formato de fuente TrueType usa el formato F26Dot6 ( coma fija con signo de 32 bits con 26 bits a la izquierda del decimal) para algunos valores numéricos en sus instrucciones. [20] Este formato se eligió para proporcionar la cantidad mínima de precisión requerida para insinuar y por razones de rendimiento. [21]
- El paquete FixedPointNumbers para Julia implementos tanto 2 n y 2 n -1 escalado fija números de punto. Estos últimos se utilizan como base para el procesamiento de imágenes para proporcionar una escala consistente tanto para valores de intensidad "enteros" como de coma flotante, evitando así el implícito "255 == 1.0" (no ecuación) presente en muchos otros marcos de procesamiento de imágenes.
Ver también
- Escala binaria
- Q (formato de número)
- Libfixmath : una biblioteca escrita en C para matemáticas de punto fijo
- Aritmética de coma flotante
- Sistema de números logarítmicos
- Minifloat
- Escala de bloque flotante
- Operación de módulo
Referencias
- ^ a b Texas Instruments, TMS320C64x DSP Library Programmer's Reference , Apéndice A.2
- ^ "Glosario de documentación de la caja de herramientas de punto fijo de MathWorks" . mathworks.com .
- ^ Inc., pensamiento sólido. "VisSim ahora es solidThinking Embed" . www.vissim.com .
- ^ Guía del usuario de PS2 GS, capítulo 7.1 "Notas explicativas"
- ^ Hargreaves, Shawn . "Ángulos, números enteros y módulo aritmético" . blogs.msdn.com. Archivado desde el original el 30 de junio de 2019 . Consultado el 5 de agosto de 2019 .
- ^ "Medición angular binaria" . Archivado desde el original el 21 de diciembre de 2009.
- ^ "Sistema de medición angular binaria" . acrónimos del diccionario libre .
- ^ LaPlante, Phillip A. (2004). "Capítulo 7.5.3, Medida angular binaria" . Diseño y análisis de sistemas en tiempo real . www.globalspec.com .
- ^ Sanglard, Fabien (13 de enero de 2010). "Revisión del código de Doom 1993 - Sección" Muros " " . fabiensanglard.net .
- ^ "Módulo de brújula Hitachi HM55B (# 29123)" (PDF) . www.hobbyengineering.com . Sensor de brújula digital Parallax (# 29123). Parallax, Inc. Mayo de 2005. Archivado desde el original (PDF) el 11 de julio de 2011, a través de www.parallax.com.
- ^ Guía del usuario de VisSim de punto fijo | http://www.vissim.com/downloads/doc/EmbeddedControlsDeveloper_UGv80.pdf
- ^ JTC1 / SC22 / WG14, estado de TR 18037: C integrado
- ^ Wiki de GCC, Soporte aritmético de punto fijo
- ^ Usando GCC, sección 5.13 Tipos de punto fijo
- ^ Manual de PostgreSQL, sección 8.1.2. Números de precisión arbitrarios
- ^ "Emulador de delfines" . Emulador de delfines .
- ^ Fractint, Un pequeño código
- ^ "Descripción técnica de WavPack" . www.wavpack.com . Consultado el 13 de julio de 2015 .
- ^ "Introducción a la Biblioteca de Numéricos Cuánticos" . Consultado el 13 de noviembre de 2019 .
- ^ "El conjunto de instrucciones TrueType: tipos de datos" .
- ^ "[Freetype] ¿Por qué 26,6?" .
Otras lecturas
- Warren Jr., Henry S. (2013). Hacker's Delight (2 ed.). Addison Wesley - Pearson Education, Inc. ISBN 978-0-321-84268-8.
enlaces externos
- Matemáticas simples de punto fijo
- Aritmética de punto fijo: una introducción
- Representación de punto fijo y matemática fraccionada
- Una mirada calculada a la aritmética de punto fijo , (PDF)
- Fundamento de Ada '83, 5.3.2: Tipos de punto fijo
- Números de coma fija para Julia