2013-08-27 1 views
0

мне нужно было проверить тот факт, чтоудвоение Int раза ЛГНА в Java

, если вы начинаете с целым числом = 1, и удвоить его журнал N (к основанию 2) раз, вы получаете N

Я думал, я бы написать некоторый Java-код для этого .. но потом, это то, что я получил

public class Log2NDoubling { 
    public static void main(String[] args) { 
     int s = 1; 
     int N = 10;   
     double lg2N = log2(N); 
     int intlg2N = (int)lg2N; 
     for(int i=0;i< intlg2N;i++){ 
      s *= 2; 
     } 
     System.out.println("s="+s); 
    } 

    private static double log2(int x){ 
     return Math.log10(x)/Math.log10(2); 
    } 

} 

который произвел выход

s = 8,0

Ну это точно не доказывающее выше statement..is неправильного выбора входных данных виновника или это мой код?

+0

Вы получили выход '8.0' из' int'? Во всяком случае, вы удвоили число '3' раз, а не' log2 (10) == 3.32' раз – Blorgbeard

ответ

4

Вы должны выбрать число, которое является степенью 2 для N: 4, 8, 16, 32, 64, 128 и т.д., или вам нужно сделать дробным удвоении здесь:

int intlg2N = (int)lg2N; 
for(int i=0;i< intlg2N;i++){ 

работы Обратим сквозь это. Лог2 (10) равен 3,3219. Но вы округление до 3.

Таким образом, вы получаете 2 * 2 * 2.