使用双打和fmod时出错

时间:2017-10-25 08:45:48

标签: c double fmod

我试图计算一个功率,然后是一个大数字模块(类型为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);
}

我做错了什么?有些回答? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

1234^79245 decimal digits

double只有大约17个十进制数字的精度。

你需要使用一点数学来将这个问题减少到不需要任意精度的东西(参见Modular Exponentiation)。

(或者如果您对高效解决方案不感兴趣,可以使用任意精度数学库+暴力。)