[C con Clase] multiplicar 2 variables

pepe perez darkmalka en hotmail.com
Lun Feb 16 10:14:52 CET 2015


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

From: programante en gmail.com
Date: Sat, 14 Feb 2015 00:45:48 +0100
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase] multiplicar 2 variables


  
    
  
  
    El 06/01/15 16:09, pepe perez escribió:
    
      
      hola muy buenas,
        

        
        tengo un problema que me trae de cabeza desde hace tiempo y
          es el multiplicar 2 variables d 32 bits, que puedan dar un
          resultado de 64bits
      
    
    Si las variables son de 32 bits, el resultado será de 32 bits
    (aunque lo almacenes en una variable de 64 bits). Tienes que
    convertirlas primero a 64 bits.

    

    
      
        yo lo que hago, viene siendo esto pero me parece demasiado
          elavorado para hacer una simple multiplicacion
        

        
        para empezar solo uso 8 digitos en decimal, vamos ni los 32
          bits
        

        
        a=44444444;
        b=55555555;
        

        
        a1=a%10000;
        a2=a/10000;
        b1=b%10000;
        b2=b/10000;
        

          
        
          c=a1 + a2%10000*10000 + b1%10000*10000;    
          resto= b2 + a1/10000 + b1/10000;
        
        

        
        me parecen excesivas operaciones aritmeticas para conseguir
          el "resto" de una simple multiplicacion, cuando para conseguir
          el resto de una division es tan facil como
        

        
         resto =a%b
      
    
    

    Sí, te estás complicando.

    

    uint64_t a=44444444;
    uint64_t b=55555555;
    uint64_t c = a % b;

    

    O si no quieres que aa y b sean de 64 bits:

    uint64_t c = (uint64_t) a % b;

    

    Lo que tú hacías "a mano" sería si el compilador no soportara
    valores de este ancho. De hecho se hacen esta clase de cálculos
    cuando se trabaja con números de precisión arbitraria (librerías de
    bigints).

    

    Pero en este caso no hace falta en absoluto :)

    

    Un saludo

    

    

  


_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150216/77beb2c8/attachment.html>


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