Программа для вычисления корня n-й степени из числа - C (СИ)
Формулировка задачи:
Есть программа для вычисления корня n-й степени из числа х, с заданой точностью с помощью итерационных формул. Но программа работает только для положительного корня n-й степени. Также задача стоит так, чтобы не использовать стандартную функцию pow(); Как доделать чтобы она вычисляла и отрицательный корень?
Листинг программы
- # include <stdio.h>
- # include <conio.h>
- # include <math.h>
- int main()
- {
- double x, y, y2, e, d;
- int k,k2,i;
- do{
- while(1){
- printf("\n\nInput value \'x\': ");
- if(scanf("%lf", &x)==0 || x==0){
- printf("\nYou have entered an incorrect value \'x\'\nPlease rewrite!\n");
- fflush(stdin);
- }else break;
- }
- while(1){
- printf("\nInput radial power \'k\': ");
- if(scanf("%d", &k)==0 || k==0 || (x<0 && (k%2)==0) || (x==0 && (k>=0))){
- printf("\nYou have entered an incorrect radial power \'k\'\nPlease rewrite!\n");
- fflush(stdin);
- }else break;
- }
- while(1){
- printf("\nInput epsilon to 1e-15: ");
- if(scanf("%lf", &e)==0 || e<=1e-15){
- printf("\nYou have entered an incorrect epsilon \'e\'\nPlease rewrite!\n");
- fflush(stdin);
- }else break;
- }
- y=d=1;
- do
- {
- y2=1;
- for(i=1;i<=k-1;i++){
- y2*=y;
- d=(x/y2-y)/k;
- y+=d;
- }
- }
- while(fabs(d)>=e);
- printf("\nResult:\ny = %.3lf ", y);
- printf("\nYou want to continue? If Yes, press any key, ESC - for exit ");
- if(getch()==27)break;
- }
- while(1);
- return 0;
- }
Решение задачи: «Программа для вычисления корня n-й степени из числа»
textual
Листинг программы
- if(k<0)x=1/x;
Объяснение кода листинга программы
- Проверка условия: k < 0.
- Если условие истинно, то x = 1/x.
- Значение переменной x не определено, поэтому необходимо выполнить дополнительные действия для вычисления значения x.
- Поскольку требуется вычислить корень n-й степени из числа, где n = -k, то x = 1/x будет являться корнем -k-й степени из числа 1.
- Для вычисления корня n-й степени из числа a, где n > 0, можно использовать формулу: x = a^(1/n).
- Подставляем значение a = 1 и n = -k в формулу x = a^(1/n).
- Вычисляем значение x = 1^(1/-k).
- Значение 1^(1/-k) вычисляется как 10^(1/-k) - десятичное приближение числа e (основание натурального логарифма).
- Для вычисления значения 10^(1/-k) можно использовать алгоритм быстрого возведения в степень.
- Применяем алгоритм быстрого возведения в степень для вычисления значения 10^(1/-k).
- Вычисляем значение 10^(1/-k) с помощью логарифма по основанию 10.
- Логарифм по основанию 10 от 10 равен 1, а логарифм по основанию 10 от 1 равен 0.
- Используем формулу логарифма по основанию 10: log(a) = log(b) + (log(a) / log(b)) * (1 - 1/b).
- Применяем формулу логарифма по основанию 10 для вычисления значения 10^(1/-k).
- Вычисляем значение 10^(1/-k) с помощью логарифма по основанию 10.
- Получаем значение 10^(1/-k).
- Подставляем значение 10^(1/-k) в формулу x = a^(1/n).
- Вычисляем значение x = (10^(1/-k))^(1/(-k)) = 10^(1/(-k*(-1))).
- Используем формулу логарифма по основанию 10: log(a) = log(b) + (log(a) / log(b)) * (1 - 1/b).
- Применяем формулу логарифма по основанию 10 для вычисления значения 10^(1/(-k*(-1))).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д