2017-10-25 30 views
0

力を計算しようとしていて、大きな数値のモジュール(double型)を計算しようとしています。私はcalculeしたい(1234^79)モッズ3337.結果は901(Ubuntuの電卓)が、関数FMOD戻っ私が間違っているのは何1788年倍精度とfmodでエラー

#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

'powl'は期待し、型の値'長いdouble'を返します。戻り値を 'double'型の変数に代入します。精度が失われます。 – Gerhardh

+0

@Gerhardh:この場合、「長い倍精度」の精度でも助けになるとは思わない! ;-) –

+1

繰り返し計算で置き換えます。 [this](https://ideone.com/yKFSSE) – BLUEPIXY

答えて

1

1234^79245 decimal digitsである。

doubleの精度は約17桁です。

この問題を任意の精度を必要としないものに減らすには、少しの計算が必要です(Modular Exponentiation参照)。

(それとも、あなたが効率的なソリューションに興味を持っていない場合は、任意精度数学ライブラリ+ブルートフォースを使用しています。)