2013-11-14 2 views
2
/** 
* @(#)precision1.java 
* 
* precision1 application 
* 
* @author 
* @version 1.00 2013/11/15 
*/ 

public class precision1 { 

    public static void main(String[] args) { 

     // TODO, add your application code 

     int x = 4; 
     double increment = 1 ; 
     double coefficient = 1; 
     double currentValue = 1; 
     double precision = 0.01; 

     for(int i = 1;increment>precision ;i++) 
     { 
      currentValue= Math.pow(x,i)*coefficient+currentValue; 
      increment= Math.abs (Math.pow(x,i)*coefficient); 
      coefficient = coefficient * (1/(i+1)); 
      System.out.println("Current result: " + currentValue); 
     } 

    } 
} 

Вопрос: Если задано число 2, он должен задать целое число x от пользователя и точность. Он должен рассчитать приблизительное значение e для мощности x, используя приведенную ниже формулу, используя введенный пользователем x. Ваша программа прекращает вычисление всякий раз, когда инкремент меньше заданного значения точности. Он также должен быть записан как метод, а не непосредственно в вашем основном методе. the formulajava algorithm расчет точности

и вывод должен быть:

current result: 5.0 
current result: 13.0 
current result: 23.666666666666664 
current result: 34.33333333333333 
current result: 42.86666666666666 
current result: 48.55555555555555 
current result: 51.8063492063492 
current result: 53.43174603174603 
current result: 54.15414462081129 
current result: 54.44310405643739 
current result: 54.54818021484688 
current result: 54.583205600983376 
current result: 54.59398264287153 
current result: 54.59706179769672 
Result is 54.59706179769672 

и выход из моего кода:

Current result: 5.0 
Current result: 5.0 

Независимо от того, чтобы просить входные части, почему мой код не работает?

+0

Хорошо, что вы получаете в своей программе? (то есть, что конкретно об этом не работает?) –

+0

его выходы текущий результат: 5.0 текущий результат: 5.0 затем остановка. – Pumpkin

+0

Можете ли вы поместить это в описание вопроса тоже? Это поможет, если комментарии будут загромождены/удалены. –

ответ

2

быстро запустить его с помощью отладчика - (1/(i+1)) является целочисленным делением, в результате чего coefficient = coefficient * (1/(i+1)); оценить в 0, и, таким образом, increment= Math.abs (Math.pow(x,i)*coefficient); оценить до 0

0

Вашего коэффициента является неправильным. Вы должны просто установить его на 1/(1 + i). Наряду с тем, что вы используете ints, как заметили другие пользователи.

0

Ваша проблема - целочисленное деление в выражении 1/(i+1) - это будет оцениваться до 0 для любого i >=2.

Я предлагаю вам изменить

coefficient = coefficient * (1/(i+1)); 

в

coefficient = coefficient/(i+1); 

или даже просто

coefficient /= i + 1; 

, который будет как правильно оценить, так как coefficient вдвое.

0

Вы цифры определены как целые числа, а не двойные.

for (int i = 1; increment > precision; i++) { 
    currentValue = Math.pow(x, i) * coefficient + currentValue; 
    increment = Math.abs(Math.pow(x, i) * coefficient); 
    coefficient = coefficient * (1d/(i + 1d)); // here is fix 

    System.out.println("Current result: " + currentValue); 
} 
Смежные вопросы