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

José Luis Torre joseluistorrehernandez en gmail.com
Jue Jul 12 23:01:39 CEST 2012


Hola Steven:

Muchas gracias, los valores que obtengo ahora son correctos hasta el
p:15, a partir de ahí ya no funciona porque se sobrepasa la precisión
de double, pero ahora los valores son consistentes (he comprobado con
maxima)

=======================================
p:15
pow(11, p-1):379749833583241.00
mod:1.00
coc:25316655572216.07
coe:25316655572216.00
dec:0.07
======================================= A partir de aquí se obtienen
valores incorrectos.
p:17
pow(11, p-1):45949729863572160.00
mod:0.00
coc:2702925286092480.00
coe:2702925286092480.00
dec:0.00
=======================================

Atentamente
José Luis



El día 12 de julio de 2012 21:02, Steven Davidson <srd4121 en njit.edu> escribió:
> 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
>
>
> _______________________________________________
> 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



-- 
José Luis Torre
ww.ehu.es




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