ES2373576T3 - Procedimiento y aparato para la multiplicación de números decimales usando un soporte físico para operaciones con números binarios. - Google Patents
Procedimiento y aparato para la multiplicación de números decimales usando un soporte físico para operaciones con números binarios. Download PDFInfo
- Publication number
- ES2373576T3 ES2373576T3 ES07251933T ES07251933T ES2373576T3 ES 2373576 T3 ES2373576 T3 ES 2373576T3 ES 07251933 T ES07251933 T ES 07251933T ES 07251933 T ES07251933 T ES 07251933T ES 2373576 T3 ES2373576 T3 ES 2373576T3
- Authority
- ES
- Spain
- Prior art keywords
- product
- decimal
- binary
- multiplication
- coefficient
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/491—Computations with decimal numbers radix 12 or 20.
- G06F7/4915—Multiplying; Dividing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/491—Indexing scheme relating to groups G06F7/491 - G06F7/4917
- G06F2207/4911—Decimal floating-point representation
Landscapes
- Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
Abstract
Un procedimiento implementado por máquina para llevar a cabo una multiplicación de números decimales entre un primer operando y un segundo operando usando un soporte físico para operaciones de números binarios que comprende: obtener (302, 304) un primer coeficiente (C1) y un segundo coeficiente (C2), siendo dicho primer coeficiente (C1) el coeficiente entero de dicho primer operando y siendo dicho segundo coeficiente (C2) el coeficiente entero de dicho segundo operando; efectuar (306) una operación de multiplicación binaria entre dicho primer coeficiente (C1) y dicho segundo coeficiente (C2) para obtener un primer producto (C') usando un multiplicador binario de enteros; redondear (312, 318-320) dicho primer producto (C') a un número predeterminado de dígitos decimales en un modo designado de redondeo sumando una constante seleccionada de una pluralidad de constantes calculadas de antemano almacenadas en una tabla de un módulo de redondeo de un procesador para obtener un segundo producto (C'), en el que se accede a la constante calculada de antemano en la tabla en base a la diferencia entre el número de dígitos decimales del primer producto (C') y el número predeterminado de dígitos decimales; obtener (322-338) un resultado (D) para dicha multiplicación de números decimales en base, al menos en parte, a dicho segundo producto (C'); y determinar (340) si dicho resultado (D) es exacto.
Description
Procedimiento y aparato para la multiplicación de números decimales usando un soporte físico para operaciones con números binarios
Antecedentes
5 1. Campo
La presente revelación versa en general acerca de sistemas de procesadores y, más específicamente, pero no exclusivamente, acerca de procedimientos y aparatos para operaciones aritméticas llevadas a cabo por procesadores.
2. Descripción
10 Típicamente, las multiplicaciones decimales de coma flotante se implementan en soporte lógico, porque no hay un soporte físico especializado para las multiplicaciones decimales de coma flotante en la mayoría de los procesadores modernos. Normalmente, un número (D) de coma flotante es representado por un coeficiente (C) y un exponente (E), es decir, D = C · 10^E, siendo enteros decimales tanto C como E. La precisión de tal representación puede ser determinada por el número de dígitos decimales de C, resultando más dígitos decimales de C en una representación
15 más precisa de D. Supongamos que los coeficientes y los exponentes de números decimales de coma flotante están almacenados en formato binario en un ordenador. Un procedimiento típico para el cálculo de una multiplicación entre dos números decimales de coma flotante (por ejemplo, D1 = C1 · 10^E1 y D2 = C2 · 10^E2) es como sigue: convertir los coeficientes (C1 y C2) y los exponentes (E1 y E2) de binario a decimal; efectuar una multiplicación de enteros decimales entre C1 y C2 y una suma de enteros decimales entre E1 y E2; redondear correctamente los resultados
20 decimales exactos (C1 · C2 y E1 + E2) hasta la precisión de destino; y luego volver a convertir el coeficiente y el exponente de los resultados finales de decimal a binario.
Aunque sería posible almacenar siempre coeficientes y exponentes de números decimales de coma flotante en un formato decimal (por ejemplo, en el formato decimal codificado en binario (BCD)), no podría aprovecharse directamente la ventaja ofrecida por las instrucciones o la circuitería existentes, que operan con números binarios. 25 En el procedimiento anterior de multiplicación decimal con coma flotante, la conversión de ida y vuelta entre los formatos decimal y binario y la multiplicación y la suma de enteros decimales consumen varios ciclos de reloj. Más importante es que la operación de redondeo de los resultados finales, que típicamente usa un cálculo basado en el resto, es muy costosa en términos de ciclos de reloj. Así, es deseable contar con enfoques más rápidos para las multiplicaciones decimales de coma flotante para que pueda mejorarse el rendimiento global de un sistema
30 informático.
KDuke: “Decimal Floating Point Processor. November 1969”, IBM Technical Disclosure Bulletin, vol. 12, nº 6, noviembre de 1969, página 862, Nueva York, EE. UU., describe un procesador decimal de coma flotante que opera con números de coma flotante en los que la mantisa es un entero y la característica representa una potencia de 10 por la que debe ser multiplicada ese entero. Tanto la característica como la mantisa se expresan de forma binaria.
35 Los aspectos de la presente invención son expuestos en las reivindicaciones independientes adjuntas.
Breve descripción de los dibujos
Las características y las ventajas de la materia dada a conocer se harán evidentes a partir de la siguiente descripción detallada de la materia, en la que:
la Figura 1 muestra un sistema informático ejemplar en el que las multiplicaciones de números decimales
40 pueden ser efectuadas usando un soporte físico para las operaciones de números binarios, según la materia dada a conocer en la presente solicitud;
la Figura 2 es un diagrama de bloques de un módulo ejemplar de multiplicación decimal que efectúa multiplicaciones de números decimales con redondeo al número más cercano dentro de la precisión predeterminada usando un soporte físico para las operaciones con números binarios, según la materia
45 dada a conocer en la presente solicitud;
la Figura 3 es un diagrama de flujo que ilustra un procedimiento ejemplar para efectuar multiplicaciones de números decimales con redondeo al número más cercano dentro de la precisión predeterminada usando un soporte físico para las operaciones con números binarios, según la materia dada a conocer en la presente solicitud;
50 la Figura 4 es un diagrama de bloques de un módulo ejemplar de multiplicación decimal que efectúa multiplicaciones de números decimales con un redondeo a la baja usando un soporte físico para las operaciones con números binarios, según la materia dada a conocer en la presente solicitud; y
la Figura 5 es un diagrama de flujo que ilustra un procedimiento ejemplar para efectuar multiplicaciones de números decimales con redondeo a la baja usando un soporte físico para las operaciones con números binarios, según la materia dada a conocer en la presente solicitud.
Descripción detallada
Según realizaciones de la materia dada a conocer en la presente solicitud, las multiplicaciones decimales de coma flotante y/o las multiplicaciones decimales de coma fija pueden ser implementadas usando un soporte físico existente para operaciones con números binarios. La implementación puede llevarse a cabo en un soporte lógico (por ejemplo, usando instrucciones de máquina para el soporte físico subyacente existente para las operaciones binarias), en un soporte físico (por ejemplo, reutilizando circuitería existente para operaciones con números binarios)
- o en una combinación de soportes lógico y físico. En particular, pueden usarse constantes calculadas de antemano que son aproximaciones de potencias negativas de 10 y están almacenadas en formato binario para redondear los resultados de la multiplicación en una precisión designada. En consecuencia, una operación de redondeo puede ser implementada con una multiplicación entre un resultado de una multiplicación y una constante calculada de antemano. Además, varias partes de una multiplicación pueden ser llevadas a cabo en paralelo. Además, puede usarse una simple comparación con una constante en vez de un costoso cálculo de resto para determinar si un resultado de la multiplicación es un punto medio entre dos números decimales de coma flotante consecutivos (para multiplicaciones con redondeo al número más cercano dentro de la precisión predeterminada) y para determinar si el resultado redondeado es una representación exacta del resultado real de la multiplicación.
La referencia en la memoria a “una realización” de la materia dada a conocer significa que un rasgo, una estructura
- o una característica particulares descritos en conexión con la realización están incluidos en al menos una realización de la materia dada a conocer. Así, las incidencias de la frase “en una realización”, que aparecen en diversos lugares de la memoria, no se refieren todas necesariamente a la misma realización.
La Figura 1 muestra un sistema informático ejemplar 100 en el que las multiplicaciones de números decimales pueden efectuarse usando un soporte físico para operaciones de números binarios. El sistema informático 100 puede comprender uno o más procesadores 110 acoplados a una interconexión 115 de sistemas. El procesador 110 puede incluir uno o más núcleos de proceso. Al menos un núcleo de proceso puede tener un módulo 120 de multiplicación decimal que use el soporte físico existente para operaciones con números binarios. El módulo de multiplicación decimal puede ser implementado en un soporte físico (por ejemplo, como parte de la unidad aritmética y lógico (ALU)) reutilizando circuitería existente para operaciones con números binarios, en un soporte lógico usando instrucciones para el soporte físico binario subyacente existente, o en una combinación de soportes físico y lógico.
El módulo de multiplicación decimal puede usar aproximaciones binarias, calculadas de antemano, a ciertas potencias negativas de 10 y almacenar estos números binarios calculados de antemano como constantes en una tabla. Cuando se redondea una resultado de una multiplicación hasta una precisión predeterminada, puede consultarse una constante calculada de antemano, correspondiente a la precisión predeterminada, en una tabla y usarla para multiplicar con el resultado de la multiplicación. Usando estas constantes calculadas de antemano, las costosas operaciones convencionales son sustituidas con operaciones menos costosas de multiplicación binaria. Además, pueden llevarse a cabo en paralelo varias partes de una multiplicación decimal. Además, pueden llevarse a cabo una detección del punto medio (es decir, determinar si un resultado de una multiplicación es un punto medio entre dos números decimales de coma flotante consecutivos con redondeo al número más cercano dentro de la precisión predeterminada) y una detección de exactitud de los resultados finales de la multiplicación usando una simple comparación con una constante en vez de los cálculos de resto, más costosos.
El sistema informático 100 también puede incluir un conjunto 130 de chips acoplado a la interconexión 115 de sistemas. El conjunto 130 de chips puede incluir uno o más paquetes de circuitos integrados o chips. El conjunto 130 de chips puede comprender una o más interfaces 135 de dispositivos para soportar transferencias de datos a otros componentes 160, o procedentes de los mismos, del sistema informático 100, como, por ejemplo, soporte lógico inalterable de BIOS, teclados, ratones, dispositivos de almacenamiento, interfaces de red, etc. El conjunto 130 de chips puede estar acoplado a un bus 170 de Interconexión de Componentes Periféricos (PCI). El conjunto 130 de chips puede incluir un puente PCI 145 que proporcione una interfaz al bus PCI 170. El puente PCI 145 puede proporcionar un camino de datos entre el procesador 110, así como otros componentes 160, y dispositivos periféricos como, por ejemplo, un dispositivo 180 de audio o una unidad 190 de disco. Aunque no se muestran, también pueden acoplarse otros dispositivos al bus PCI 170.
Además, el conjunto 130 de chips puede comprender un controlador 125 de memoria que esté acoplado a una memoria principal 150. La memoria principal 150 puede almacenar datos y secuencias de instrucciones que son ejecutadas por el procesador 110 o cualquier otro dispositivo incluido en el sistema. El controlador 125 de memoria puede acceder a la memoria principal 150 en respuesta a transacciones de memoria asociadas con el procesador 110 o algunas otras circuiterías. La memoria principal 150 puede comprender diversos dispositivos de memoria que proporcionan ubicaciones direccionables de almacenamiento de las que el controlador 125 de memoria puede leer datos y/o en las que puede escribir datos. La memoria principal 150 puede comprender uno o más tipos diferentes
de dispositivos de memoria, como dispositivos de memoria de acceso directo dinámico (DRAM), dispositivos de DRAM síncrona (SDRAM), dispositivos de SDRAM de Doble Tasa de Datos (DDR) u otros dispositivos de memoria.
Aunque la Figura 1 muestra un sistema informático ejemplar, el módulo de multiplicación decimal puede ser usado en cualquier unidad de proceso de cualquier sistema. Por ejemplo, el módulo de multiplicación decimal puede ser usado en un sistema multiprocesador simétrico (SMP), en un sistema de multiprocesamiento a nivel de chip (CMP) o en cualquier otro sistema multiprocesador.
En la siguiente descripción, se usa una multiplicación decimal de coma flotante con fines ilustrativos, pero la materia dada a conocer en la presente solicitud no está limitada a las multiplicaciones decimales de coma flotante. Una persona con un dominio normal de la técnica puede entender fácilmente que la materia dada a conocer también se aplica a multiplicaciones decimales enteras y a multiplicaciones decimales de coma fija. El Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) tiene un estándar 754-1985 para la aritmética binaria de coma flotante que se está revisando. Se propone una nueva revisión del estándar 754 del IEEE para añadir definiciones de aritmética decimal de coma flotante. La propuesta (IEEE 754R) define tres formatos decimales de coma flotante con tamaños de 32, 64 y 128 bits y precisiones respectivas de p=7, p=16 y p=34 dígitos decimales. Además, se supone que los números decimales tienen sus coeficientes y sus exponentes almacenados en un formato binario (aunque los coeficientes y los exponentes estén en formato decimal, pueden ser convertidos eficientemente al binario aprovechando el paralelismo disponible a nivel de instrucciones). La materia dada a conocer en la presente solicitud puede ser usada por la IEEE 754R, pero no está limitada a la IEEE 754R o por la misma.
Un número decimal D de coma flotante se representa típicamente como D = ±C · 10^E, siendo C un entero positivo que tiene, como mucho, p dígitos decimales y siendo E un exponente entero. Se supone, además, que dos operandos decimales de coma flotante D1 = C1 · 10^E1 y D2 = C2 · 10^E2 son positivos, teniendo sus coeficientes, como mucho, p dígitos decimales que están almacenados como enteros binarios. Para los números negativos (D1 y/o D2), las reglas que gobiernan su multiplicación pueden deducirse directamente de las que gobiernan la multiplicación de dos números positivos según se describen más abajo.
La Figura 2 es un diagrama de bloques de un módulo ejemplar 200 de multiplicación decimal que efectúa multiplicaciones de números decimales con redondeo al número más cercano dentro de la precisión predeterminada usando un soporte físico para operaciones con números binarios, según la materia dada a conocer en la presente solicitud. El módulo de multiplicación decimal puede comprender al menos un multiplicador 210 de enteros binarios, un identificador 220 del número de dígitos decimales, al menos un sumador 230 de enteros binarios, un módulo 240 de redondeo, un desplazador binario 250, un detector 260 del punto medio y un detector 270 de la exactitud. Aunque no se muestra en la figura, el módulo de multiplicación decimal puede comprender también un convertidor de decimal a binario para convertir un número de formato decimal a formato binario y/o un convertidor de binario a decimal para convertir un número de formato binario a formato decimal.
El multiplicador 210 de enteros binarios recibe en primer lugar los coeficientes binarios (C1 y C2) de dos operandos de entrada y efectúa una multiplicación binaria, C’ = C1 · C2. El multiplicador de enteros binarios pasa entonces el resultado de la multiplicación, C’, al identificador 220 del número de dígitos decimales, que determina el número de dígitos decimales de C’. Dado que el número de dígitos decimales de un número está estrechamente correlacionado con el número de dígitos binarios válidos del número, la determinación del número de dígitos decimales puede lograrse mediante una tabla de consulta y simples comparaciones si es necesario. La tabla de consulta puede incluir relaciones correspondientes entre el número de dígitos binarios válidos y el número de dígitos decimales en un número. Por ejemplo, un número con 6 dígitos binarios válidos (es decir, de 100000 a 111111) tiene 2 dígitos decimales. Si C’ tiene 6 dígitos binarios, una simple consulta en una tabla dirá el número de dígitos decimales que puede tener C’. Sin embargo, un número con 4 dígitos binarios válidos (es decir, de 1000 a 1111) puede tener 1 o 2 dígitos decimales. Así, si C’ tiene 4 dígitos binarios válidos, una simple consulta en una tabla no es suficiente para determinar el número de dígitos decimales de C’. En este caso puede ser necesaria una simple comparación, además de una consulta en una tabla. La consulta en la tabla dirá que C’ tiene 1 o 2 dígitos decimales; luego, el resultado se compara, además, con el número binario “1001”. Si C’ es menor o igual que “1001”, C’ tiene un dígito decimal; si no, C’ tiene 2 dígitos decimales.
Una vez que el identificador 220 del número de dígitos decimales determina el número q de dígitos decimales de C’, C’ puede ser redondeado a una precisión predeterminada p por el módulo 240 de redondeo. En primer lugar, se compara q con p. Si q no es mayor que p, no hace falta redondeo alguno y el producto de D1 y D2 será D = C’ · 10^E, en el que el sumador 230 obtiene E (= E1 + E2). Dado que no se efectúa redondeo alguno, D es la representación exacta del producto de D1 y D2. Si q es mayor que p, el módulo de redondeo calcula la diferencia (x) entre q y p, es decir x = q - p (esto lo puede realizar el sumador de enteros binarios). El módulo de redondeo puede obtener representaciones binarias de 10^(-x) y (½·10^x) consultando la tabla.
El redondeo de C’ puede efectuarse usando la Propiedad 1 de la solicitud de patente estadounidense nº 11/133.811. En aras de la conveniencia en la descripción, esta propiedad se resume a continuación.
Propiedad 1
Sea C E N un número en base b = 2, y sea d0·10(q-1) + d1·10(q-2) + d2·10(q-3) + … + d(q-2)·101 + d(q-1) su representación en b = 10, siendo d0, d1, … d(q-1) f 0.
Sean x E {1, 2, 3, … , (q-1)} y p = ln10/ln2 = log210.
Si y E N, y � techo(frac(p·x) + p ·q) y Kx es el valor de 10-x redondeado al alza (hacia la infinitud positiva) hasta y bits:
Kx = (10-x)RP·y = 10-x · (1 + £), siendo 0 < £ < 2-(y·1)
entonces
piso(C·Kx) = d0·10(q·x-1) + d1·10(q·x-2) + d2·10(q·x-3) + … + d(q-x-2)·101 + d(q-x-1)
Nota: En la práctica, podemos tomar y = 1 + techo(p· p), que hace 0< £ <2techo(p-q).
Esta propiedad da una manera precisa para “cortar” x dígitos decimales de la parte menor de un entero C cuando está disponible su representación binaria, evitando así la necesidad de convertir C en decimal, eliminar los x dígitos decimales inferiores y luego volver a convertir el resultado a binario. Por ejemplo, si el número decimal C = 123456789 está disponible en binario y se requieren sus seis dígitos decimales más significativos, la Propiedad 1 especifica precisamente la constante para que piso(C-K3) sea 123456 con certidumbre. Los valores de Kx pueden ser calculados de antemano. Así, para este cálculo solo se precisan una multiplicación de enteros binarios y un desplazamiento lógico a la derecha.
Supongamos, además, que el producto completo de enteros C’ = C1 - C2 requiere q dígitos decimales para su representación. El redondeo real a p dígitos decimales será necesario únicamente si q E [p+1, 2-p]. En todos los modos de redondeo, usaremos con este fin la constante Kx = 10-x, que es calculada de antemano hasta los y bits, según se especifica en la Propiedad 1, siendo x = q – p. Dado que q E [p+1, 2·p] en situaciones en las que es necesario el redondeo, todos los casos están debidamente cubiertos si elegimos y = 1 + techo (2·p·p). Los valores Kx calculados de antemano pueden ser almacenados como pares (kx, ex) para toda x E {1, 2, …, p}, siendo kx y ex enteros positivos, siendo Kx = kx· 2^(-ex).
Para redondear C’ al entero más cercano con p dígitos decimales, se efectúa la siguiente operación con C’: (C’ + ½ · 10^x) · 10^(-x). La aproximación binaria de 10^(-x) puede ser calculada de antemano según la Propiedad 1 y almacenada en una tabla. De manera similar, la representación binaria de (½·10^x) puede también ser calculada de antemano y almacenada en una tabla. El módulo 240 de redondeo puede consultar en tablas las representaciones binarias de 10^(-x) y (½·10^x). El módulo de redondeo puede pasar C’ y la representación binaria de (½·10^x) al sumador 230, que los suma entre sí para producir una suma C” = C’ + (½·10^x). El multiplicador 210 de enteros binarios puede entonces multiplicar C” y Kx para producir un producto para C* (= C” · Kx) para el desplazador binario
250. El desplazador binario desplaza C* ex bits a la derecha para producir un número piso de C = piso(C*) y un número fraccionario f* = frac(C*) = C* - piso(C*). Por ejemplo, piso(15,2) = 15, frac(15,2) = 0,2; piso(-15,2) = -16, frac(-15,2) = -15,2 - piso(15,2) = 0,8.
El detector 260 del punto medio puede detectar si C’ es un punto medio entre dos números decimales de coma flotante consecutivos. Esto puede efectuarse calculando un resto R = C’ - C·10^x y comparando R con ½·10^x. Si R = ½·10^x, entonces C’ es un punto medio debería ser redondeado al número decimal par de coma flotante más cercano según algunos estándares como la especificación IEEE 754R. Sin embargo, el cálculo de un resto es una operación bastante costosa. Según una realización de la materia dada a conocer en la presente solicitud, puede evitarse el cálculo del resto y, en su lugar, puede usarse una sola comparación con una constante, 10^(-p), calculada de antemano. Específicamente, el detector del punto medio puede comparar f* con 0 y con 10^(-p). Si f* es mayor que 0 pero menor que 10^(-p) y si C es impar, entonces el detector del punto medio resta 1 de C, de modo que C’ se redondea al número par más cercano; si no, C’ se redondea correctamente y no es necesario ningún ajuste de C por parte del detector del punto medio. Después de la detección del punto medio y, si hace falta, del ajuste de C, el sumador 230 puede sumar E1, E2 y x entre sí para producir un correspondiente exponente, E, para el coeficiente de C; es decir, E = E1 + E2 + x. En este punto, puede obtenerse un producto redondeado D de la multiplicación de D1 y D2, con el coeficiente C y el exponente E; es decir, D = C · 10^E.
En ciertas situaciones, puede ser necesario informar a un usuario de si E es una representación exacta del producto real de D1 y D2. Si q � p + 1, E es inexacto, a no ser que los x dígitos decimales eliminados de la parte inferior de C* sean todos ceros. Un enfoque para determinar si E es exacto es comparar con 0 el resto R anterior. Si R = 0, E es exacto; si no, no lo es. Una vez más, el cálculo del resto es muy costoso. Según una realización de la materia dada a conocer en la presente solicitud, el detector 270 de la exactitud puede usar operaciones de comparación para determinar la exactitud de D.
Dado que el valor de C’ es redondeado al número decimal más cercano, es posible que C, que resulta de C’, pueda tener (p+1) dígitos decimales en vez de los p dígitos predeterminados. Así, el detector de la exactitud determina en primer lugar si C = 10^p; es decir, si hay un desbordamiento en el redondeo. Si C = 10^p, C tiene (p+1) dígitos decimales. Después, el detector de la exactitud ajusta C a 10^(p-1) y, en consecuencia, aumenta E en 1. En segundo lugar, el detector de la exactitud determinar si (f* - ½) es mayor que 0 pero menor que la constante 10^(-p) calculada de antemano (o si f* es mayor que ½ pero menor que (10^(-p) + ½)). Si lo es, D es una representación exacta del producto real de D1 y D2; si no, D es un resultado inexacto.
La Figura 3 es un diagrama de flujo que ilustra un procedimiento ejemplar 300 para efectuar multiplicaciones de números decimales con redondeo al número más cercano dentro de la precisión predeterminada usando un soporte físico para operaciones con números binarios, según la materia dada a conocer en la presente solicitud. En el bloque 302 pueden recibirse dos exponentes, E1 y E2; y en el bloque 304 pueden recibirse dos coeficientes, C1 y C2, correspondientes a E1 y E2, respectivamente. En el bloque 306 puede efectuarse una multiplicación de enteros binarios entre C1 y C2 para producir un producto C’. En el bloque 308 puede determinarse el número q de dígitos decimales de C’ en base al número de dígitos binarios de C’ y, si es necesario, también mediante una operación de comparación, según se ha dado a conocer más arriba junto con la Figura 2. La correspondiente relación entre el número de dígitos decimales y el número de dígitos binarios de C’ puede almacenarse en una tabla.
En el bloque 310 se realiza una comparación entre q y la precisión p predeterminada. Si q <= p, no se precisa redondeo alguno y puede obtenerse un resultado final de la multiplicación de D (= D1 · D2) en el bloque 314, siendo C’ el coeficiente y siendo (E1 + E2) el exponente. Este resultado D es una representación exacta del producto real de la multiplicación de D1 y D2. El procedimiento 300 puede acabar en el bloque 316. Si q > p, se calcula x = q - p en el bloque 312. En el bloque 318 puede obtenerse la representación binaria de (½·10^x) consultando una tabla que incluya constantes calculadas de antemano. En el bloque 320 puede efectuarse una suma; es decir, C” = C’ + (1/2·10^x). Mientras se efectúan las operaciones implicadas en los bloques 318 y 320, puede obtenerse la representación binaria de Kx = 10^(-x) en el bloque 322 consultando una tabla que almacena constantes calculadas de antemano. En el bloque 324 puede efectuarse una multiplicación de enteros binarios, C* = C”· Kx. En el bloque 326, puede desplazarse C* ex bits a la derecha para obtener un número piso C = piso(C*) y un número fraccionario f* = frac(C*). Las operaciones de los bloques 312 y 318-326 efectúan conjuntamente operaciones de redondeo para C’ según la Propiedad 1, tal como se ha dado a conocer más arriba.
En el bloque 328 puede efectuarse una comparación entre 0, f* y 10^(-p) y en el bloque 330 puede efectuarse una comprobación de si C es par, ambas para la detección del punto medio. Si f* es mayor que 0 pero menor que 10^(-p) si C es impar, entonces el detector del punto medio resta 1 de C en el bloque 332, de modo que C’ se redondea al número par más cercano; si no, C’ se redondea correctamente y no es necesario ningún ajuste de C. En el bloque 334, después del redondeo y de la detección del punto medio, puede obtenerse un resultado de la multiplicación de (D1·D2); es decir, D = C · 10^(E1+E2+x). En el bloque 336 puede detectarse si C tiene más de p dígitos decimales después del redondeo comparando C con 10^p. Si C = 10^p, C se desborda después del redondeo y en el bloque 338 pueden efectuarse ajustes de C y E; es decir, cambiar C de 10^p a 10^(p-1) y cambiar E de (E1+E2+x) a (E1+E2+x+1). En el bloque 340, se efectúan comparaciones para determinar si D, a partir del bloque 334 o del bloque 338, es una representación exacta del producto real D1 · D2; es decir, si los x dígitos eliminados de la parte inferior de C* durante el redondeo son todos ceros. Si (f* - ½) es mayor que 0 pero menor que 10^(-p) (o si f* es mayor que ½, pero menor que (10^(-p) + ½)), en el bloque 344 puede darse salida a que el resultado es exacto; si no, en el bloque 332 puede darse salida a que el resultado es inexacto. El procedimiento 300 puede acabar en el bloque 346.
El procedimiento 300 mostrado en la Figura 3 para la multiplicación decimal con coma flotante en el modo de redondeo al más cercano usando soporte físico para operaciones con números binarios puede resumirse como la siguiente Propiedad 2.
Propiedad 2
C’ = C1 · C2; /* multiplicación binaria de enteros */
q = número de dígitos decimales requeridos para representar C’; /* consultar una tabla */
si q � p, el resultado D = C’ · 10^(E1+E2) es exacto;
si no /* para el caso en el que q E [p+1, 2·p] */
{
x = q - p; /* número de dígitos decimales que ha de eliminarse de la parte inferior de C’, x E [1 , p] */
C” = C’ + (1/2 · 10x); /* 1/2 · 10x se calcula de antemano */
Kx = 10-x · (1 + £), 0 < £ < 2-techo(2·p·p); /* calculado de antemano según se especifica en la Propiedad 1 */
C* = C” · Kx = C” · kx · 2^( -ex); /* multiplicación binaria de enteros con coma binaria implicada */
C = piso(C*); /* C tiene p dígitos decimales según se redondea según la Propiedad 1 */
f* = frac(C*); /* f* consiste en los ex bits inferiores de C* */
si 0 < f* < 10-p, /* puesto que C* = C” · Kx · 2^(-ex). comparar ex bits desplazados fuera de C* con 10-p */
5 {
si C es impar, C = C - 1;
}
D = C · 10E1+E2+x;
si C = 10p /* desbordamiento en el redondeo */
D = 10p-1 · 10E1+E2+x+1
si 0 < (f* - ½) < 10-p, el resultado es exacto
si no, el resultado es inexacto;
}
Obsérvese que varias partes de los cálculos de la Propiedad 2 pueden efectuarse en paralelo; por ejemplo, el
15 cálculo de C’ = C1 · C2 y E = E1 + E2 puede efectuarse en paralelo, y también la comprobación q p y el cálculo de x = q - p, leer 1/2 · 10x y kx de las tablas, el cálculo de C, f* y E = E1 + E2 + x y las comprobaciones f* < 10^(-p) y 0 < f*-1/2 < 10^(-p).
La Figura 4 es un diagrama de bloques de un módulo ejemplar 400 de multiplicación decimal que efectúa multiplicaciones de números decimales con redondeo a la baja usando un soporte físico para operaciones con 20 números binarios, según la materia dada a conocer en la presente solicitud. El módulo 400 de multiplicación decimal puede comprender al menos un multiplicador 410 de enteros binarios, un identificador 420 del número de dígitos decimales, al menos un sumador 430 de enteros binarios, un módulo 440 de redondeo, un desplazador binario 450 y un detector 460 de la exactitud. Aunque no se muestra en la figura, el módulo de multiplicación decimal puede comprender también un convertidor de decimal a binario para convertir un número de formato decimal a formato
25 binario y un convertidor de binario a decimal para convertir un número de formato binario a formato decimal.
El módulo 400 de multiplicación decimal funciona de manera similar al módulo 200 de multiplicación decimal mostrado en la Figura 2, salvo en que el módulo 440 de redondeo y el detector 460 de la exactitud funcionan de forma diferente del módulo 240 de redondeo y del detector 270 de la exactitud, respectivamente y no hay ningún detector del punto medio en el módulo 400 de multiplicación decimal. Dado que C’ se redondea a la baja, a 30 diferencia del módulo 240 de redondeo, el módulo 440 de redondeo no precisa obtener una representación binaria de (½·10^x) ni obtener C” = C’ + (½·10^x) del sumador 430. En vez de ello, el módulo 440 de redondeo pasa directamente Kx y C’ al multiplicador 410 de enteros binarios para obtener C* = C’ · Kx. Dado que C’ es redondeado a la baja, no hay desbordamiento de redondeo. Así, a diferencia del detector 270 de exactitud, el detector 460 de la exactitud no precisa detectar el desbordamiento en el redondeo ni efectuar ajustes en C ni E, en consecuencia, si
35 hay desbordamiento de redondeo. El detector 460 de la exactitud simplemente determina si (f* ½) es mayor que 0 pero menor que la constante de cálculo previo, 10^(-p). Si lo es, D, a partir del módulo 440 de redondeo, es una representación exacta del producto real de D1 y D2; si no, D es un resultado inexacto.
La Figura 5 es un diagrama de flujo que ilustra un procedimiento ejemplar 500 para efectuar multiplicaciones de números decimales con redondeo a la baja usando un soporte físico para operaciones con números binarios, según 40 la materia dada a conocer en la presente solicitud. En el bloque 505 pueden recibirse dos exponentes, E1 y E2; y en el bloque 510 pueden recibirse dos coeficientes, C1 y C2, correspondientes a E1 y E2, respectivamente. En el bloque 515 puede efectuarse una multiplicación de enteros binarios entre C1 y C2 para producir un producto C’. En el bloque 520 puede determinarse el número q de dígitos decimales de C’. En el bloque 525 se realiza una comparación entre q y p. Si q <= p, no se precisa redondeo alguno y puede obtenerse un resultado final exacto de la 45 multiplicación de D (= D1 · D2) en el bloque 530, siendo C’ el coeficiente y siendo (E1 + E2) el exponente. El procedimiento 500 puede acabar en el bloque 535. Si q > p, se calcula x = q - p en el bloque 540. En el bloque 545 puede obtenerse la representación binaria de Kx = 10^(-x) consultando una tabla que almacena constantes calculadas de antemano. En el bloque 550 puede efectuarse una multiplicación de enteros binarios, C* = C’· Kx. En el bloque 555, puede desplazarse C* ex bits a la derecha para obtener un número piso C = piso(C*) y un número
50 fraccionario f* = frac(C*). Las operaciones de los bloques 540-555 efectúan operaciones de redondeo para C’ según la Propiedad 1, tal como se ha dado a conocer más arriba.
En el bloque 560 puede obtenerse, después de redondear, un resultado de la multiplicación de (D1·D2); es decir, D = C · 10^(E1+E2+x). En el bloque 565 pueden realizarse comparaciones para determinar si D es una representación exacta del producto real (D1·D2); es decir, si los x dígitos eliminados del final de C* durante el redondeo son todos ceros. Si f* es mayor que 0 pero menor que 10^(-p), en el bloque 575 puede darse salida a que el resultado es exacto; si no, en el bloque 570 puede darse salida a que el resultado es inexacto. El procedimiento 500 puede acabar en el bloque 580.
El procedimiento 500 mostrado en la Figura 5 para la multiplicación decimal con coma flotante en el modo de redondeo a la baja usando soporte físico para operaciones con números binarios puede resumirse como la siguiente Propiedad 3.
Propiedad 3
C’ = C1 · C2; /* multiplicación binaria de enteros */
q = número de dígitos decimales requeridos para representar C’; /* consultar una tabla */
si q p, el resultado D = C’ · 10E1+E2 es exacto;
si no /* para el caso en el que q E [p+1, 2·p] */
{
x = q - p; /* número de dígitos decimales que ha de eliminarse de la parte inferior de C’, x E [1 , p] */
Kx = 10-x · (1 + £), 0 < £ < 2-techo(2·p·p); /* calculado de antemano según se especifica en la Propiedad 1 */
C* = C” · Kx = C” · kx · 2^( -ex); /* multiplicación binaria de enteros con coma binaria implicada */
C = piso(C*); /* desplazamiento lógico a la derecha; C tiene p dígitos decimales, calculados correctamente por la Propiedad 1 */
f* = frac(C*); /* la parte fraccionaria de C* consiste en los ex bits inferiores de C* */
D = C · 10E1+E2+x;
si 0 < f* < 10-p, el resultado es exacto;
si no, el resultado es inexacto;
}
De modo similar a los cálculos para la Propiedad 2, también varias partes de los cálculos de la Propiedad 3 pueden efectuarse en paralelo; por ejemplo, el cálculo de C’ = C1 · C2 y E = E1 + E2 puede efectuarse en paralelo, y también la comprobación q p y el cálculo de x = q - p, leer 1/2 · 10x y kx de las tablas, el cálculo de C, f* y E = E1 + E2 + x y la comprobación 0 < f* < 10^(-p) y la codificación del resultado. Obsérvese también que la condición 0 < f* < 10^(-p) de la Propiedad 3 para la determinación de la exactitud es también válida si 10^(-p) es sustituido por 10^(-x)
o por Kx = 10^(-x) · (1 + £).
En algunas situaciones, puede mencionarse/usarse un redondeo a cero. Este modo no se trata aquí por separado porque para valores positivos es idéntico al modo de redondeo a la baja, y para valores negativos es idéntico al modo de redondeo al alza.
En lo anterior, las multiplicaciones decimales en un modo de redondeo al más cercano y en un modo de redondeo a la baja son dadas a conocer junto con las Figuras 2-5. Un resultado de una multiplicación decimal también puede ser redondeado al alza. Dado que una multiplicación decimal en el modo de redondeo al alza funciona de forma muy similar a la multiplicación en el modo de redondeo a la baja, no se proporcionan figuras extra para este modo. En vez de ello, en lo que sigue solo se apuntan las diferencias entre el modo de redondeo a la baja y el de redondeo al alza.
Aunque el cálculo del resultado de la multiplicación, D, y la determinación de la exactitud son idénticos a los realizados para el redondeo a la baja según se muestra en las Figuras 4 y 5, el valor D = piso(C’·Kx) · 10^(E1+E2+x) = C · 10^(E1+E2+x) es el resultado final solo si es exacto el resultado calculado para el modo de redondeo a la baja. Si el resultado es inexacto, entonces el resultado para el redondeo al alza precisa que C sea sustituida por C = C +
1. Si C = 10^p (desbordamiento de redondeo), entonces tanto C como E precisan ser ajustados; es decir, C = 10^p1), E = E+1 = E1 +E2+x+1, D = C · 10^E.
Aunque en las Figuras 1-5 se describe una realización ejemplar de la materia dada a conocer con referencia a diagramas de bloques y de flujo, las personas con un dominio normal de la técnica apreciarán de inmediato que
pueden usarse alternativamente muchos otros procedimientos de implementación de la materia dada a conocer. Por ejemplo, puede cambiarse el orden de ejecución de los bloques en los diagramas de flujo y/o pueden cambiarse, eliminarse o combinarse algunos de los bloques en los diagramas de bloques/flujo descritos.
En la descripción precedente se han descrito diversos aspectos de la materia dada a conocer. Con fines explicativos, se presentaron números, sistemas y configuraciones específicos para proporcionar una comprensión cabal de la materia. Sin embargo, es evidente para un experto en la técnica que tenga el beneficio de la presente revelación que la materia puede ser puesta en práctica sin los detalles específicos. En otros casos, características, componentes o módulos bien conocidos fueron omitidos, simplificados, combinados o divididos para no obscurecer la materia dada a conocer.
Diversas realizaciones de la materia dada a conocer pueden ser implementadas en soporte físico, en soporte lógico inalterable, en soporte lógico o en una combinación de los mismos, y pueden ser descritas con referencia a un código de programa, o en conjunción con el mismo, como instrucciones, funciones, procedimientos, estructuras de datos, lógica, programas de aplicación, representaciones de diseño o formatos para la simulación, la emulación y la fabricación de un diseño, lo que, cuando es objeto de acceso por parte de una máquina, da como resultado que la máquina lleve a cabo tareas, definiendo tipos abstractos de datos o contextos de soporte físico de bajo nivel, o produciendo un resultado.
Para las simulaciones, el código de programa puede representar un soporte físico usando un lenguaje de descripción de soporte físico u otro lenguaje descriptivo funcional que esencialmente proporcione un modelo de cómo se espera que se comporte el soporte físico diseñado. El código de programa puede ser lenguaje ensamblador
o de máquina, o datos que puedan ser compilados y/o interpretados. Además, es común en la técnica hablar de que el soporte lógico, de una u otra forma, realiza una acción o causa un resultado. Tales expresiones son meramente una forma taquigráfica de afirmar la ejecución de un código de programa por parte de un sistema procesador que hace que un procesador realice una acción o produzca un resultado.
El código de programa puede estar almacenado, por ejemplo, en memoria volátil y/o no volátil, como dispositivos de almacenamiento y/o un medio asociado legible por una máquina o accesible por una máquina, incluyendo memoria de estado sólido, discos duros, discos flexibles, almacenamiento óptico, cintas, memoria flash, lápices USB, discos digitales de vídeo, discos digitales versátiles (DVD), etc., así como medios más exóticos, como un almacenamiento de conservación de un estado biológico accesible por máquina. Un medio legible por máquina puede incluir cualquier mecanismo para almacenar, transmitir o recibir información de una forma legible por una máquina, y el medio puede incluir un medio tangible a través del cual pueden pasar señales propagadas eléctricas, acústicas o de otra forma o una onda portadora que codifica el programa, como antenas, fibras ópticas, interfaces de comunicaciones, etc. El código de programa puede ser transmitido en forma de paquetes, datos en serie, datos en paralelo, señales propagadas, etc., y puede ser usado en un formato comprimido o cifrado.
El código de programa puede ser implementado en programas que se ejecutan en máquina programables como ordenadores móviles o estacionarios, agendas electrónicas, decodificadores, teléfonos móviles y buscapersonas, y otros dispositivos electrónicos, cada uno de los cuales incluye un procesador, memoria volátil y/o no volátil legible por un procesador, al menos un dispositivo de entrada y/o uno o más dispositivos de salida. El código de programa puede ser aplicado a los datos introducidos usando el dispositivo de entrada para llevar a cabo las realizaciones descritas y para generar información de salida. La información de salida puede ser aplicada a uno o más dispositivos de salida. Una persona con un dominio normal de la técnica puede apreciar que las realizaciones de la materia dada a conocer pueden ser puestas en práctica con diversas configuraciones de sistemas de ordenadores, incluyendo sistemas multiprocesador y de procesador con múltiples núcleos, miniordenadores, ordenadores centrales, así como ordenadores o procesadores ubicuos o en miniatura que puedan ser integrados en casi cualquier dispositivo. También pueden ponerse en práctica realizaciones de la materia dada a conocer en entornos informáticos distribuidos en los que las tareas pueden ser llevadas a cabo por dispositivos remotos de proceso que están conectados a través de una red de comunicaciones.
Aunque las operaciones pueden ser descritas como un proceso secuencial, algunas de las operaciones pueden, de hecho, ser realizadas en paralelo, concurrentemente y/o en un entorno distribuido, y con un código de programa almacenado localmente y/o de forma remota para el acceso por máquinas de un solo o de múltiples procesadores. Además, en algunas realizaciones el orden de las operaciones puede ser modificado sin apartarse de la materia dada a conocer. El código de programa puede ser usado por controladores integrados o en conjunto con los mismos.
Aunque la materia dada a conocer ha sido descrita con referencia a realizaciones ilustrativas, no se pretende que esta descripción sea interpretada en un sentido restrictivo. Se estima que diversas aplicaciones de las realizaciones ilustrativas, así como otras realizaciones de la materia, que son evidentes a las personas expertas en la técnica a la que pertenece la materia dada a conocer, están dentro del alcance de la materia dada a conocer.
Claims (17)
- REIVINDICACIONES1. Un procedimiento implementado por máquina para llevar a cabo una multiplicación de números decimales entre un primer operando y un segundo operando usando un soporte físico para operaciones de números binarios que comprende:5 obtener (302, 304) un primer coeficiente (C1) y un segundo coeficiente (C2), siendo dicho primer coeficiente (C1) el coeficiente entero de dicho primer operando y siendo dicho segundo coeficiente (C2) el coeficiente entero de dicho segundo operando;efectuar (306) una operación de multiplicación binaria entre dicho primer coeficiente (C1) y dicho segundo coeficiente (C2) para obtener un primer producto (C’) usando un multiplicador binario de enteros;10 redondear (312, 318-320) dicho primer producto (C’) a un número predeterminado de dígitos decimales en un modo designado de redondeo sumando una constante seleccionada de una pluralidad de constantes calculadas de antemano almacenadas en una tabla de un módulo de redondeo de un procesador para obtener un segundo producto (C”), en el que se accede a la constante calculada de antemano en la tabla en base a la diferencia entre el número de dígitos decimales del primer producto (C’) y el número15 predeterminado de dígitos decimales;obtener (322-338) un resultado (D) para dicha multiplicación de números decimales en base, al menos en parte, a dicho segundo producto (C”); ydeterminar (340) si dicho resultado (D) es exacto.
- 2. El procedimiento de la reivindicación 1 en el que la obtención de un primer coeficiente (C1) y un segundo20 coeficiente (C2) comprende la conversión de dicho primer coeficiente (C1) y de dicho segundo coeficiente (C2) a un formato binario si dicho primer coeficiente (C1) y dicho segundo coeficiente (C2) no están en formato binario.
- 3. El procedimiento de la reivindicación 1 en el que dicho modo designado de redondeo es un redondeo al más cercano.25 4. El procedimiento de la reivindicación 1 en el que el redondeo del número de dígitos decimales de dicho primer producto (C’) comprende:determinar (308) el número de dígitos decimales de dicho primer producto (C’);comparar (310) el número de dígitos decimales de dicho primer producto (C’) con dicho número predeterminado de dígitos;30 usar dicho primer producto (C’) como coeficiente del resultado (D) si el número de dígitos decimales de dicho primer producto (C’) es menor o igual que dicho número predeterminado de dígitos decimales; y, si no,convertir dicho primer producto (C’) en dicho segundo producto (C”).
- 5. El procedimiento de la reivindicación 4 en el que la obtención de un resultado (D) para dicha multiplicación de35 números decimales comprende, si el número de dígitos decimales de dicho primer producto (C’) es menor o igual que dicho número predeterminado de dígitos decimales:efectuar una operación de adición entre el exponente (E1) de dicho primer operando y el exponente (E2) de dicho segundo operando para producir un exponente final;dar salida a dicho resultado (D), siendo un coeficiente dicho primer producto (C’) y siendo un exponente 40 dicho exponente final; eindicar que dicho resultado (D) es exacto.
- 6. El procedimiento de la reivindicación 4 en el que dicho modo de redondeo es un redondeo al más cercano y en el que la conversión de dicho primer producto (C’) en dicho segundo producto (C”) comprende:calcular (312) la diferencia, x, entre el número de dígitos decimales en dicho primer producto (C’) y dicho 45 número predeterminado de dígitos decimales;obtener (322) una representación binaria de 10^(-x); yobtener (320) una representación binaria de (1/2*10^x);efectuar una suma binaria entre dicho primer producto (C’) y dicha representación binaria de (1/2*10^x); yefectuar una multiplicación binaria de enteros entre el resultado de dicha suma binaria y dicha representación binaria de 10^(-x) para producir un producto intermedio (C*).
- 7. El procedimiento de la reivindicación 6 en el que la conversión de dicho primer producto (C’) en dicho segundo5 producto (C”) comprende, además, efectuar una operación de desplazamiento binario en dicho producto intermedio (C*) para obtener un tercer producto y para producir un número piso (C) y un número faccionario (f*), desplazando a la derecha dicha operación de desplazamiento binario dicho producto intermedio (C*) el número de bits de dicha representación binaria de 10^(-x), siendo dicho número piso (C) el coeficiente de dicho tercer producto, incluyendo dicho número fraccionario (f*) bits que son desplazados fuera de dicho producto10 intermedio (C*).
- 8. El procedimiento de la reivindicación 7 en el que la obtención de un resultado (D) para dicha multiplicación de números decimales comprende:sumar conjuntamente el exponente (E1) de dicho primer operando, el exponente (E1) de dicho segundo operando y x para producir un exponente para dicho resultado (D);15 si dicho modo designado de redondeo es redondeo al más cercano,efectuar la detección del punto medio en base a dicho número piso (C) y a dicho número fraccionario (f*);ajustar dicho número piso (C) si se determina que dicho primer producto (C’) es un punto medio; ydeterminar si hay un desbordamiento de redondeo y, si lo hay, ajustar dicho número piso (C) y dicho exponente; y20 producir dicho resultado (D) para dicha multiplicación de números decimales, siendo un coeficiente dicho número piso (C) y siendo un exponente dicho exponente.
- 9. El procedimiento de la reivindicación 7 en el que la determinación de si dicho resultado (D) es exacto comprende:efectuar operaciones de comparación entre dicho número fraccionario (f*) y una primera constante y una 25 segunda constante; ysi dicho número fraccionario (f*) es mayor que dicha primera constante pero menor que dicha segunda constante, indicar que dicho resultado (D) es exacto; en caso contrario, indicar que dicho resultado (D) es inexacto.
- 10. Un procesador (110) que comprende un módulo (120) de multiplicación decimal para llevar a cabo una30 multiplicación de números decimales entre un primer operando y un segundo operando, incluyendo dicho módulo de multiplicación decimal:al menos un multiplicador (210) de enteros binarios para efectuar una multiplicación binaria entre el coeficiente entero (C1) de dicho primer operando y el coeficiente entero (C2) de dicho segundo operando para obtener un primer producto (C’);35 un identificador (220) del número de dígitos decimales para determinar el número de dígitos decimales de dicho primer producto (C’);un módulo (240) de redondeo adaptado para redondear dicho primer producto (C’) a un número predeterminado de dígitos decimales en un modo designado de redondeo sumando una constante seleccionada de una pluralidad de constantes calculadas de antemano almacenadas en una tabla para40 obtener un segundo producto (C”), en el que se accede a la constante calculada de antemano en la tabla en base a la diferencia entre el número de dígitos decimales del primer producto (C’) y el número predeterminado de dígitos decimales;al menos un sumador (230) para producir un resultado (D) de dicha multiplicación decimal en base, en parte, a dicho segundo producto (C”); y45 un detector (270) de exactitud para determinar si dicho resultado (D) es exacto.
- 11. El procesador de la reivindicación 10 en el que dicho módulo de redondeo está adaptado para determinar el número de dígitos decimales en dicho primer producto (C’); para comparar el número de dígitos decimales de dicho primer producto (C’) con dicho número predeterminado de dígitos decimales; y, si el número de dígitos decimales de dicho primer producto (C’) es mayor que dicho número predeterminado de dígitos decimales;para calcular la diferencia, x, entre el número de dígitos decimales de dicho primer producto (C’) y dicho número predeterminado de dígitos decimales, y para obtener una representación binaria de 10^(-x).
- 12. El procesador de la reivindicación 11 en el que dicho sumador está adaptado para obtener un resultado (D) para dicha multiplicación decimal, si el número de dígitos decimales de dicho primer producto (C’) es menor o5 igual que dicho número predeterminado de dígitos decimales sumando el exponente (E1) de dicho primer operando y el exponente (E2) de dicho segundo operando, siendo el coeficiente de dicho resultado (D) dicho primer producto (C’).
- 13. El procesador de la reivindicación 11 en el que dicho módulo de redondeo está adaptado para obtener, además, una representación binaria de (1/2*10^(x)) y para informar a dicho sumador para que efectúe una10 suma binaria entre dicho primer producto (C’) y dicha representación binaria de (1/2*10^(x)) para producir dicho segundo producto (C”), si dicho modo designado de redondeo es redondeo al más cercano.
- 14. El procesador de la reivindicación 13 en el que dicho multiplicador de enteros binarios está adaptado para efectuar una multiplicación binaria entre dicho segundo producto (C”) y dicha representación binaria de 10^(-x) para producir dicho producto intermedio (C*), si dicho modo designado de redondeo es redondeo al más15 cercano.
- 15. El procesador de la reivindicación 14 en el que dicho módulo de multiplicación decimal comprende, además, un desplazador binario (250) adaptado para efectuar operaciones de desplazamiento de dicho producto intermedio (C”) para obtener un número piso (C) y un número fraccionario (f*) desplazando a la derecha dicho producto intermedio (C*) el número de bits de dicha representación binaria de 10^(-x).20 16. El procesador de la reivindicación 15 en el que dicho módulo de multiplicación decimal comprende, además, un detector (260) de punto medio, si dicho modo designado de redondeo es redondeo al más cercano, para detectar si dicho primer producto (C’) es un punto medio y para ajustar dicho número piso (C) si dicho primer producto (C’) es un punto medio.
- 17. El procesador de la reivindicación 16 en el que dicho sumador está adaptado, además, para sumar x, el25 exponente (E1) de dicho primer operando y el exponente (E2) de dicho segundo operando para producir un exponente para dicho resultado (D) de dicha multiplicación de números decimados, siendo el coeficiente de dicho resultado (D) dicho número piso (C).
- 18. El procesador de la reivindicación 17 en el que dicho detector de exactitud está adaptado para ajustar el coeficiente y el exponente de dicho resultado (D) de dicha multiplicación de números decimales si hay30 desbordamiento de redondeo cuando dicho modo designado de redondeo es redondeo al más cercano; y para determinar si dicho resultado (D) de dicha multiplicación de números decimales es exacto comparando dicho número fraccionario (f*) con al menos una constante.
- 19. Un sistema informático que comprende un procesador según se reivindica en una cualquiera de las reivindicaciones 10 a 18 que, además, comprende:35 una memoria dinámica síncrona de acceso directo, SDRAM; y en el que dicho procesador está acoplado para acceder a dicha SDRAM a través de una interconexión de sistemas.
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US11/432,813 US7912890B2 (en) | 2006-05-11 | 2006-05-11 | Method and apparatus for decimal number multiplication using hardware for binary number operations |
| US432813 | 2006-05-11 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2373576T3 true ES2373576T3 (es) | 2012-02-06 |
Family
ID=38328456
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES07251933T Active ES2373576T3 (es) | 2006-05-11 | 2007-05-10 | Procedimiento y aparato para la multiplicación de números decimales usando un soporte físico para operaciones con números binarios. |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US7912890B2 (es) |
| EP (1) | EP1857925B1 (es) |
| AT (1) | ATE530980T1 (es) |
| ES (1) | ES2373576T3 (es) |
Families Citing this family (19)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7707233B2 (en) * | 2005-05-19 | 2010-04-27 | Intel Corporation | Coverting a number from a first base to a second base |
| US7814138B2 (en) * | 2006-05-11 | 2010-10-12 | Intel Corporation | Method and apparatus for decimal number addition using hardware for binary number operations |
| US8190664B2 (en) * | 2007-04-26 | 2012-05-29 | International Business Machines Corporation | Employing a mask field of an instruction to encode a sign of a result of the instruction |
| US20080270495A1 (en) * | 2007-04-26 | 2008-10-30 | International Business Machines Corporation | Insert/extract biased exponent of decimal floating point data |
| US8051117B2 (en) | 2007-04-26 | 2011-11-01 | International Business Machines Corporation | Shift significand of decimal floating point data |
| US8572141B2 (en) * | 2008-03-19 | 2013-10-29 | International Business Machines Corporation | Execution of fixed point instructions using a decimal floating point unit |
| US20100023569A1 (en) * | 2008-07-22 | 2010-01-28 | Daw Shien Scientific Research & Development, Inc. | Method for computerized arithmetic operations |
| US8311213B2 (en) * | 2009-12-07 | 2012-11-13 | Mitsubishi Electric Research Laboratories, Inc. | Method for determining functions applied to signals |
| US8416955B2 (en) * | 2009-12-07 | 2013-04-09 | Mitsubishi Electric Research Laboratories, Inc. | Method for determining functions applied to signals |
| US9128759B2 (en) | 2012-11-27 | 2015-09-08 | International Business Machines Corporation | Decimal multi-precision overflow and tininess detection |
| US10109014B1 (en) * | 2013-03-15 | 2018-10-23 | Allstate Insurance Company | Pre-calculated insurance premiums with wildcarding |
| US10241757B2 (en) | 2016-09-30 | 2019-03-26 | International Business Machines Corporation | Decimal shift and divide instruction |
| US10127015B2 (en) | 2016-09-30 | 2018-11-13 | International Business Machines Corporation | Decimal multiply and shift instruction |
| US10310815B1 (en) | 2017-11-30 | 2019-06-04 | International Business Machines Corporation | Parallel decimal multiplication hardware with a 3X generator |
| CN111258641B (zh) * | 2018-11-30 | 2022-12-09 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| CN111260070B (zh) * | 2018-11-30 | 2022-11-29 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
| JP7304295B2 (ja) * | 2020-01-09 | 2023-07-06 | 日立Astemo株式会社 | 演算装置、認識装置および制御装置 |
| CN112506935B (zh) * | 2020-12-21 | 2023-08-29 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备、存储介质及程序产品 |
| US12578925B2 (en) * | 2022-02-25 | 2026-03-17 | International Business Machines Corporation | Dynamic algorithm selection |
Family Cites Families (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP1236086A2 (en) * | 1999-12-10 | 2002-09-04 | Broadcom Corporation | Apparatus and method for reducing precision of data |
| US7395297B2 (en) * | 2001-05-25 | 2008-07-01 | Sun Microsystems, Inc. | Floating point system that represents status flag information within a floating point operand |
| US7069289B2 (en) * | 2001-05-25 | 2006-06-27 | Sun Microsystems, Inc. | Floating point unit for detecting and representing inexact computations without flags or traps |
| US7546328B2 (en) * | 2004-08-31 | 2009-06-09 | Wisconsin Alumni Research Foundation | Decimal floating-point adder |
| US7519647B2 (en) * | 2005-02-09 | 2009-04-14 | International Business Machines Corporation | System and method for providing a decimal multiply algorithm using a double adder |
| US7519645B2 (en) * | 2005-02-10 | 2009-04-14 | International Business Machines Corporation | System and method for performing decimal floating point addition |
| US7747669B2 (en) * | 2006-03-31 | 2010-06-29 | Intel Corporation | Rounding of binary integers |
| US7814138B2 (en) * | 2006-05-11 | 2010-10-12 | Intel Corporation | Method and apparatus for decimal number addition using hardware for binary number operations |
-
2006
- 2006-05-11 US US11/432,813 patent/US7912890B2/en not_active Expired - Fee Related
-
2007
- 2007-05-10 ES ES07251933T patent/ES2373576T3/es active Active
- 2007-05-10 EP EP07251933A patent/EP1857925B1/en not_active Not-in-force
- 2007-05-10 AT AT07251933T patent/ATE530980T1/de not_active IP Right Cessation
Also Published As
| Publication number | Publication date |
|---|---|
| EP1857925B1 (en) | 2011-10-26 |
| ATE530980T1 (de) | 2011-11-15 |
| EP1857925A3 (en) | 2008-12-10 |
| US7912890B2 (en) | 2011-03-22 |
| US20070266072A1 (en) | 2007-11-15 |
| EP1857925A2 (en) | 2007-11-21 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES2373576T3 (es) | Procedimiento y aparato para la multiplicación de números decimales usando un soporte físico para operaciones con números binarios. | |
| US12217020B2 (en) | Small multiplier after initial approximation for operations with increasing precision | |
| Liu et al. | Power efficient division and square root unit | |
| US10592207B2 (en) | Dynamic variable precision computation | |
| US8631380B2 (en) | Method of, and apparatus for, data path optimisation in parallel pipelined hardware | |
| Vázquez et al. | Iterative algorithm and architecture for exponential, logarithm, powering, and root extraction | |
| KR102481418B1 (ko) | 단일 곱셈-누산 방법 및 장치 | |
| Li et al. | Efficient approximate floating-point multiplier with runtime reconfigurable frequency and precision | |
| TW201818266A (zh) | 用查找表執行遞歸運算的方法、設備及其測試方法 | |
| Nannarelli | Performance/power space exploration for binary64 division units | |
| Kuang et al. | Energy-efficient multiple-precision floating-point multiplier for embedded applications | |
| US7814138B2 (en) | Method and apparatus for decimal number addition using hardware for binary number operations | |
| TWI258698B (en) | Static floating-point processor suitable for embedded digital signal processing and shift control method thereof | |
| Sivasankaran | Design and implementation of high speed and high accuracy fixed-width modified booth multiplier for DSP application | |
| Nannarelli | Radix-16 combined division and square root unit | |
| US10275391B2 (en) | Combining of several execution units to compute a single wide scalar result | |
| US20060031272A1 (en) | Alignment shifter supporting multiple precisions | |
| Gustafsson et al. | Arithmetic | |
| Vazquez et al. | Redundant floating-point decimal CORDIC algorithm | |
| Abdurakhmanov et al. | Exploring Microscaling MX Minifloat Systolic Arrays on FPGAs | |
| Prema et al. | Design and implementation in power-efficient and thermal conductivity of vedic processor for embedded applications | |
| Kumar et al. | Design and Simulation of Single-Precision Inexact Floating-Point Adder/Subtractor | |
| Kuhlmann et al. | A Novel Low‐power Shared Division and Square‐root Architecture Using the GST Algorithm | |
| Shukla et al. | Performance Improvement Of Reversible Logic Adder | |
| Ratre et al. | A Review Paper on Arithmetic and Logical Unit for Graphics Processor |