Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 07.01.2022
Сообщений: 57

Возвести число в степень без использования cmath

07.01.2022, 19:37. Показов 5789. Ответов 7

Студворк — интернет-сервис помощи студентам
Задача 3
Пользователь вводит числа A и B. Программа
возводит число A в степень B и выводит результат.
Задачу нужно решить без использования математических
функций (команд) языка программирования C++.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.01.2022, 19:37
Ответы с готовыми решениями:

Как возвести в степень без использования функции pow?
Какой нужен алгоритм для этого?

Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.
Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.

Если введенное число отрицательное и четное, то возвести его в 3 степень, иначе возвести в квадрат
Ввести целое число В. Если В отрицательное и четное, то возвести его в 3 степень, иначе возвести в квадрат

7
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
07.01.2022, 21:32
Уже было много раз. И в самое последнее время...
C++
1
2
3
4
5
6
7
8
double Pow(double x, int n)
{ 
   if (n==0) return 1;
   double z = Pow(x, n/2);
   z *= z;
   if (n%2) z *= x;
   return z;
}
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
09.01.2022, 15:59
Цитата Сообщение от Raven 1 Посмотреть сообщение
Возвести число в степень без использования cmath
Цитата Сообщение от Raven 1 Посмотреть сообщение
решить без использования математических функций (команд) языка программирования C++
подключай тогда <math.h> языка C
Цитата Сообщение от Байт Посмотреть сообщение
Уже было много раз.
Конечно было, но каждый раз одно и то же и только для целых степеней.
Цитата Сообщение от Raven 1 Посмотреть сообщение
Пользователь вводит числа A и B. Программа возводит число A в степень B и выводит результат.
Не вижу, чтобы ТС говорил только о целых числах. Предлагаю экспертам форума подумать над реализацией функции, которая вычислила бы x^y, где x, y - действительные числа.
C++
1
2
3
4
double pow(double x, double y)
{
    // code
}
В голову пока приходит формула https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{y}\Leftrightarrow {e }^{\ln(x)\cdot y}.
log(x) и exp(x) можно вычислить с помощью разложения в ряд Тейлора, причем суммирование ряда можно реализовать без математических функций С++/С. Вопрос только в том, как быстро будет сходиться этот ряд, если аргумент будет далёк от точки, в окрестности которой строился ряд.
0
Объявлятель переменных
 Аватар для SpBerkut
1224 / 410 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
12.01.2022, 13:51
Цитата Сообщение от Royal_X Посмотреть сообщение
Предлагаю экспертам форума подумать над реализацией функции, которая вычислила бы x^y, где x, y - действительные числа.
Я не эксперт, но получилось как-то так:
C++
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
31
#include <iostream>
 
double ln(const double x, const double eps = 1e-8) {
    double result = 0.0;
    double term = (x-1)/(x+1);
    double delta = term*term;
    unsigned den = 1;
    while (term > 2*eps) {
        result += term / den;
        term *= delta;
        den += 2;
    }
    return 2*result;
}
 
double pow(const double a, const double x, const double eps = 1e-8) {
    double result = 0.0;
    double term = 1.0;
    double delta = x*ln(a, eps);
    unsigned den = 1;
    while (term > eps) {
        result += term;
        term *= delta / den++;
    }
    return result;
}
 
int main()
{
    std::cout << pow(65536,1.0/16);
}
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
12.01.2022, 15:48
SpBerkut, вполне норм. Можно добавить твоей функции способность возводить в отрицательную степень

C++
1
2
3
4
5
6
7
8
9
10
11
12
double pow(const double a, const double x, const double eps = 1e-8) {
    double xx = x < 0. ? x * -1. : x;
    double result = 0.0;
    double term = 1.0;
    double delta = xx*ln(a, eps);
    unsigned den = 1;
    while (term > eps) {
        result += term;
        term *= delta / den++;
    }
    return x < 0. ? 1. / result : result;
}
1
48 / 37 / 14
Регистрация: 23.12.2015
Сообщений: 199
12.01.2022, 18:04
Если ограничиться возведением в неотрицательную степень и не думать о том, что для большой степени тормоза (впрочем задача в любом случае учебная, для реальной скорости - все равно банально надо брать стандартную функцию степени) то можно совсем просто
C++
1
2
3
4
5
6
7
double Pow(double x, int n)
{ 
   if(n==0)
    {return 1;}
   else
    {return x*Pow(x,n-1);}
}
Добавлено через 2 минуты
"Тормоза"
Тот совсем простой код, что написал я - сколько n, столько раз и пройдет. Линейная зависимость скорости выполнения от n.
Тот код посложнее, что написал
Байт
насколько понимаю, за счет уменьшения степени при шаге вдвое - имеет логарифмическую зависимость скорости выполнения от n.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.01.2022, 23:30
Цитата Сообщение от Ajir Посмотреть сообщение
насколько понимаю, за счет уменьшения степени при шаге вдвое - имеет логарифмическую зависимость скорости выполнения от n.
Совершенно верно понимаете!
Да, задача учебная. Но пусть учатся хорошему
0
2 / 2 / 0
Регистрация: 07.01.2022
Сообщений: 57
22.01.2022, 12:39  [ТС]
Всем спасибо за оказанное содействие, от меня требовали следующего решения:
#include <iostream>

using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
cout << "Задача 3.\nВведите число: ";
int A, B, C;
cin >> A;
cout << "Введите степень: ";
cin >> B;
C = A;
for (int i = 1; i < B; i++)
{
C = C * A;
}
cout << "Результат возведения: " << C;
cout << "\n";

return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2022, 12:39
Помогаю со студенческими работами здесь

Написать программу, которая возводит число в соответствующую степень(без использования стандартных функций)
Кто знает как решить задачу на С++. Нужно через цикл while её решить. Написать программу, которая возводит число в соответствующую...

Возвести число в степень без использования pow()
Всем привет! Нужно возвести число в степень без функции pow(), число и степень вводятся вручную в форму. Не понимаю эти извращения от...

Возвести заданное число в целую степень без использования функции pow (цикл while)
Возвести заданное число в целую степень без использования функции pow

Как возвести число в большую степень без ошибок?
как поднести число к большому степени в visual basic, чтоб не выбивало ошибки, например 10^15 и т.д.?

Возвести первое число в квадрат, а второе возвести в четвертую степень
С клавиатуры вводится два трёхзначных числа. Возвести первое число в квадрат, а второе возвести в четвертую степень, если хотя бы у одного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru