我正在为加密大学做一个大学问题。我的程序的一部分是我想得到功率x使得(2744 ^ x)%24852977 = 8414508.我有一个循环,将双倍增加0.001。我的问题是这样的:每次在小数位上显示更长的数字时,而不是我的循环增加0.001。这是与MIN / MAX的长值有关,如果是这样,我怎么能解决这个问题,或者任何人都可以解释我出错了?这是我的增量样本。如何获得4位小数的截止点。
10.276999999989387 10.277099999989387 10.277199999989387 10.277299999989387 10.277399999989386 10.277499999989386 10.277599999989386 10.277699999989386 10.277799999989385
import java.lang.*;
public class crypt {
public static void main(String args[])
{
long p =24852977;//variables
long g = 2744;
long sum = 8414508;
long c1 = 15268076;
long c2 = 743675;
for(double i=0; i<=p; i=i+0.0001)//loop for increasing the power in next part of the program
{
long num=(long)(Math.pow((long)g, i));//number = g to the power of i
System.out.println(i);// just to check
if(num % p == sum)//my equation
{
System.out.println(i);//print the power that satisfy's this
}
}
}
}
答案 0 :(得分:0)
请记住,数字的内部表示是二进制的。因此,对于每个十进制数,不一定存在精确的二进制表示。也就是说,没有确切的0.0001增量表示,预计会出现舍入错误。