簡體   English   中英

處理雙打時的模運算符用法

[英]Modulo operator usage while dealing with doubles

我必須找到(1 + sqrt(3))^ n的值,其中n <10 ^ 9。由於這個數字可能非常大,我們必須打印ans%1000000007。 我為此編寫了以下函數。

double power(double x, int y)
{
    double temp;
    if( y == 0)
       return 1;
    temp = power(x, y/2);
    if (y%2 == 0)
       return temp*temp;
    else
    {
       if(y > 0)
           return x*temp*temp;
       else
           return (temp*temp)/x;
    }
}

現在,我無法理解如何處理模態。請有人幫忙。

你不能那樣做。 您可以使用fmod ,但是由於無法精確表示sqrt(3)因此對於大指數,您會得到假值。

我非常有信心,您實際上需要整數結果( (1 + sqrt(3))^n + (1 - sqrt(3))^n ),因此您應該使用整數數學,並通過對模運算求平方來求冪每一步。 cf. 這個問題

這種方法是不可行的。 如此問題所示,您需要比雙精度類型提供的精度高數億個十進制數字。 你實際上是試圖解決的問題進行了討論這里 你們兩個在同一班嗎?

模數需要整數類型,您可以將union用作雙精度類型,並與整數結合使用模數(如果這是C)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM