[C con Clase] Obtener el resto de la división de dos números grandes

Steven Davidson srd4121 en njit.edu
Jue Jul 12 21:02:03 CEST 2012


Hola José Luis,

On 7/12/2012 6:52 AM, José Luis Torre wrote:
> Hola Steven:
>
> En primer lugar, muchas gracias por tu respuesta.
>
> He probado con la función modf() y obtengo el mismo resultado.
>

Bueno, podrías usar 'modf()' para ayudar con tu función 'cociente()', 
pero la solución que te di era usar 'fmod()' para que no tuvieras que 
usar tu función 'resto()'.

> No consigo entender porqué obtengo restos negativos, los restos
> deberían estar en el intervalo [0, p-1]
>
> Te paso el programa con los cambios que me has indicado, por
> si quisieras ver los resultados que me sorpenden.
>

En primer lugar, estabas usando '%.0f' con 'printf()'. Lo correcto es 
usar 'lf' porque manejas números de tipo 'double'.

El problema es que estás manejando unas cantidades muy grandes que ni 
'double' ni tampoco 'long double' pueden almacenar con tanta precisión 
de la cual requieres en tu algoritmo.

La solución sería usar otro tipo de dato que no sea básico para guardar 
todos los dígitos que requieres. Lo que realmente te interesa es usar un 
tipo de entero "gigante". Esto implicaría usar alguna biblioteca no 
estándar, aunque posiblemente las bibliotecas de Boost puedan ayudar en 
este tema. Claro está, nada te detiene en crear tú mismo este tipo de 
dato abstracto.


Espero que esto te oriente.

Steven





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