2013-09-03 5 views
1
public int X1[]=new int[1001]; 
public int X2[]=new int[1001]; 
public int Xj; 
public double R[]=new double[1001];  

public double[] Generate(int seed1,int seed2) 
{ 
    X1[0]=seed1; 
    X2[0]=seed2; 

for(int j=0;j<2;j++) 
    { 
    X1[j+1]=(40014*X1[j])%(2147483563); 
    X2[j+1]=(40629*X2[j])%2147483399; 
    System.out.println(X1[j+1]+" "+X2[j+1]); 
    Xj=Math.abs(X1[j+1]-X2[j+1]); 
    Xj=Xj%2147483562; 
    System.out.println(Xj+" "+j); 
    if(Xj>0) 
     { R[j]=Xj/2147483563;} 

    else if(Xj==0) 
     { R[j]=2147483562/2147483563;} 


    System.out.println(R[j]+" "+j); 

} 

В приведенном выше коде, когда я пытаюсь напечатать элементы R [], он просто печатает 0. Может кто-то сказать мне, что не так? Я положил i out.println как способ отладки кода. Однако они печатают желаемое значение.Значение элементов массива всегда равно

+0

ObRef [Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

ответ

10

Это потому, что вы выполняете целые деления. Например, изменить:

Xj/2147483563 

... к этому:

Xj/2147483563.0 

Сделайте то же самое со всеми остальными подразделениями. Обратите внимание, что в Java int/int всегда будет возвращать int. Чтобы получить результат с десятичными знаками, один из двух операндов (или обоих) должен быть десятичным числом.

Смежные вопросы