我试图计算一个功率,然后是一个大数字模块(类型为double)。我想计算(1234 ^ 79)mod 3337.结果是901(Ubuntu的计算器),但函数fmod返回1788。
#include <math.h>
#include <tgmath.h>
#include <stdlib.h>
#include <stdio.h>
void main(){
double res1;
double dou = powl(1234.00,79.00);//function for doubles
printf("Result in double o powl %.3f\n",dou);
res1=fmod(dou, 3337.00);//doubles
printf("Result in double of fmod %.2f\n",res1);
}
我做错了什么?有些回答? 提前谢谢。
答案 0 :(得分:1)
1234^79
有245 decimal digits。
double
只有大约17个十进制数字的精度。
你需要使用一点数学来将这个问题减少到不需要任意精度的东西(参见Modular Exponentiation)。
(或者如果您对高效解决方案不感兴趣,可以使用任意精度数学库+暴力。)