[C con Clase] multiplicar 2 variables

Juan José López juanjolistascorreo en gmail.com
Lun Feb 16 19:05:32 CET 2015


el Mon, 16 Feb 2015 10:14:52 +0100
pepe perez <darkmalka en hotmail.com> dijo:

> a ver con esto
> uint64_t a=44444444;uint64_t b=55555555;uint64_t c = a % b;
> sale el resto de la division.
> lo q yo kiero es multiplicar a*b y elresultado se supone q da 128
> bits sobre el papel, en programacion directamente solo t puede dar 64
> bits, y seran los primeros 64, pero como consigo los 64 ultimos? yo
> sigo sin saberlo, pero ya no es necesario encontre una libreria hecha
> por unos suecos q puedes hacer multiplicaciones d tantos bits como
> disponga tu ram. cualkier operacion aritmetrica realmente
> 
> gmplib.org para el q le interese
> 

Nunca llegué a usar realmente el ensamblador, y mucho menos a
dominarlo. Pero recuerdo que los X86 tenian instrucciones específicas
para trabajar con datos de ancho superior al tamaño de palabra. Creo
que una de las instrucciones permitia guardar el resultado en 2
palabras, en lugar de 1 como es lo habitual, y ponia a 1 uno de los
flags de la CPU.

En otras palabras, el como se trabaja con datos que puedan exceder del
tamaño de palabra del procesador depende por completo del compilador, y
no es portable entre arquitecturas. Esto es uno de los motivos de la
existencia de librerías como la que comentas: permitir operaciones de
ancho arbitrario de manera portable.

Si quieres prescindir de ella, debes mirar la documentación del
compilador que utilices, o escribir tus propias funciones a mano en
ensamblador.

O, tal y como comentas, utilizar librerias escritas para ello ;-)




Más información sobre la lista de distribución Cconclase