Específicamente: Tengo dos enteros sin signo (a, b) y deseo calcular (a * b)% UINT_MAX (UINT_MAX se define como el int sin signo máximo). ¿Cual es la mejor manera de hacerlo?Multiplicación de módulo (en C)
Antecedentes: necesito escribir un módulo para Linux que emule una secuencia geométrica, leer de él me dará el siguiente elemento (módulo UINT_MAX), la única solución que encontré es agregar el elemento actual a los tiempos, mientras que la adición se realiza utilizando la siguiente lógica:. (que utilizo para la secuencia aritmética)
for(int i=0; i<b; ++i){
if(UINT_MAX - current_value > difference) {
current_value += difference;
} else {
current_value = difference - (UINT_MAX - current_value);
}
cuando Current_Value = a en la primera iteración (y se actualiza en cada iteración, y la diferencia = a (siempre) Obviamente, esta no es una solución inteligente. ¿Cómo lo lograría una persona inteligente?
¡Gracias!
¿No tiene permitido usar el operador de módulo o los tipos enteros de 8 bytes? – davogotland
La solución estúpida muy simple para "long long" es un tipo más largo que int. resultado larga larga = ((larga duración) a) * ((larga duración) b)% ((larga duración) UINT_MAX); –
@JoachimIsaksson el resultado no debería ser necesariamente del tipo largo, ¿no? – davogotland