Задача
Проверить численно второй замечательный предел:[latex]\lim_{x\to\infty}\left(1+\frac{1}{n}\right)^n=e[/latex] , задавая n значения 1,2,3…При каком n исследуемое выражение отличается от e менее, чем на заданную погрешность [latex]\varepsilon[/latex]?
Тесты
[latex]\varepsilon[/latex] | n | Полученное e | e | Разность | Комментарий |
1.1 | 1 | 2.0000000000 | 2.7182818284 | 0.7182818284 | Пройден |
0.005 | 271 | 2.7132834531 | 2.7182818284 | 0.0049983753 | Пройден |
0.0000000314 | 32890950 | 2.7182817970 | 2.7182818284 | 0.0000000313 | Пройден |
0 | Погрешность равна 0, тогда e=2.7182818284, а n=бесконечность | Не пройден |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import java.util.*; import java.lang.*; import java.io.*; class Limit { public static void main (String[] args) throws java.lang.Exception { double ee, dife;//Описание переменных для хранения входных данных.// Scanner in = new Scanner(System.in); double E = Math.abs(in.nextDouble());//Чтение из стандартного потока ввода.// int n = 0; //Присвоение значения переменной (от которой зависит цикл).// if (Math.abs(E) == 0) { System.out.printf("Погрешность равна 0, тогда e=" + Math.E + ", а n=infinity"); } else { do //Сам цикл программы// { n++; ee = Math.pow (1 + 1 / (double)n, (double)n); //Вычисление значения последовательности при n=1,2,3,..// dife = Math.E - ee; //Вычисление разности полученного значения и константы// } while (Math.abs(dife) > E); //Конечный критерий, при котором цикл останавливается// //Вывод окончательных результатов на экран// System.out.printf("После n=" + n + " исследуемое выражение отличается от е менее, чем на " + Math.abs(E) + ", а именно на " + dife + "\n"); System.out.printf("Значение последовательности при таком n=" + ee + ", e=" + Math.E); } } } |
Для этого в цикле высчитывалось значение формулы [latex](1+\frac{1}{n})^{n}[/latex] при [latex]n\to \infty[/latex] и находилась разность [latex]dife=e-(1+\frac{1}{n})^{n}[/latex]. Если[latex]dife>\varepsilon[/latex] , то цикл заканчивался и программа запоминала последнее значение n и после этого выводила его на экран.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import java.util.*; import java.lang.*; import java.io.*; class Limit { public static void main (String[] args) throws java.lang.Exception { double ee, dife;//Описание переменных для хранения входных данных.// Scanner in = new Scanner(System.in); double E = Math.abs(in.nextDouble());//Чтение из стандартного потока ввода.// int n = 0; //Присвоение значения переменной (от которой зависит цикл).// if (Math.abs(E) == 0) { System.out.printf("Погрешность равна 0, тогда e=" + Math.E + ", а n=infinity"); } else { do //Сам цикл программы// { n++; ee = Math.pow (1 + 1 / (double)n, (double)n); //Вычисление значения последовательности при n=1,2,3,..// dife = Math.E - ee; //Вычисление разности полученного значения и константы// } while (Math.abs(dife) > E); //Конечный критерий, при котором цикл останавливается// //Вывод окончательных результатов на экран// System.out.printf("После n=" + n + " исследуемое выражение отличается от е менее, чем на " + Math.abs(E) + ", а именно на " + dife); System.out.printf("Значение последовательности при таком n=" + ee + ", e=" + Math.E); } } } |
— Нужно исправить отступы.
— Вставьте ссылку на IDEone
— В 8-й строке Вы явно перестраховались с двумя условиями 🙂
— Нужно использовать константу M_E, которая уже задаёт е с максимальной для double точностью (описана в math.h)
— В 18-й строке целое число выводите по формату с плавающей точкой. Исправьте, пожалуйста.
Отступы исправлены, ссылка уже была в программе (на словах Код Программы).
Число n — double в моей программе.
Исправлено
— В 8 строке видимо имелось в виду E > 0?
— В 16-й строке уместнее было бы поставить модуль у diff, а не Е. Если считать, что возможен ввод отрицательного Е, то логично считать это некорректными данными.
А вот разность между точным и приближенным значением может иметь любой знак. Нас обычно интересует абсолютная величина погрешности. Кстати, в Вашем случае стремиться к е будет снизу.
— 29-я строка с неправильным отступом.
Замечания технические. Так что работу я засчитываю, но исправить нужно.
Исправил
Принято
Если пройдете по своей ссылке «Код на Java» и посмотрите поле stdout — увидите, что не хватает одного перевода строки перед «Значение последовательности …».
Добавил перевод на новую строку