我正在做一个关于密码学院的问题。我的程序的一部分是,我想获得这样的力量(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
}
}
}
}
现代PC型计算机使用的浮点类型不能表示所有可能的实际值,所以会出现舍入误差。 – 2015-03-24 23:39:23
如果您试图获得一个可以提高2744的数字,结果是模数24852977中的结果是8414508,那么这完全是错误的。你的答案应该是一个整数,而不是浮点数。权力不会等于8414508;它将是8414508加上24852977的倍数。你已经完全计算出了错误的数量。 – 2015-03-25 00:33:07
提高措辞 – 2015-03-25 01:10:31