Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Satansoft
19 / 15 / 6
Регистрация: 27.02.2012
Сообщений: 737
1

Реализовать квадратный корень через возведение в степень

03.02.2016, 14:11. Просмотров 1109. Ответов 10
Метки нет (Все метки)

Попытка реализовать квадратный корень через возведение в степень, попробовав встроенный pow(16, 1/2), всё считает верно, однако как его реализовать под этот случай?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2016, 14:11
Ответы с готовыми решениями:

Как реализовать функции что бы найти синус, косинус, корень квадратный, степень от числа
Добрый вечер,разрабатываю калькулятор на winapi хотелось бы узнать как...

Возведение в степень -корень из 3
вот код #include "stdafx.h" #include <conio.h> #include <math.h> #include...

Возведение в степень через цикл
Даны натуральные числа n и k. Найти значение выражения: 1^k+2^k+3^k+...+n^k....

Возведение числа в степень через for
Нужна программа для возведения числа в степень через for

Возведение в степень через цикл
Помогите пожалуйста, не очень понимаю как посчитать это выражение R=a/(a+b)^b...

10
Dimension
Dimension
574 / 444 / 221
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 1
03.02.2016, 14:23 2
Добавлено через 1 минуту
Цитата Сообщение от Satansoft Посмотреть сообщение
однако как его реализовать под этот случай?
вы о чем?
0
Satansoft
19 / 15 / 6
Регистрация: 27.02.2012
Сообщений: 737
03.02.2016, 14:33  [ТС] 3
Цитата Сообщение от Dimension Посмотреть сообщение
вы о чем?
О реализации sqrt через pow (=

Целочисленный pow делается итеративно, как-то такъ:
C++
1
2
3
4
5
int pow (long num, long p)
{
  for(int i = 0; i< p-1; i++)
     num *= num;
}
но он не годится, если степень дробная (0,5 в случае квадратного корня (1/2)).
0
Hikari
Хитрая блондиночка $)
1451 / 964 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
03.02.2016, 14:37 4
Цитата Сообщение от Satansoft Посмотреть сообщение
всё считает верно, однако как его реализовать под этот случай?
Наверное так:
C
1
float sqr(float x){ return pow(x, 1/2);};
0
Satansoft
19 / 15 / 6
Регистрация: 27.02.2012
Сообщений: 737
03.02.2016, 14:40  [ТС] 5
Цитата Сообщение от Hikari Посмотреть сообщение
float sqr(float x){ return pow(x, 1/2);};
Вы вездесущи, однако меня интересует pow с нуля, а не библиотечный, для дробной степени.
0
mporro
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
03.02.2016, 15:00 6
Satansoft
Воспользоваться разложением в ряд http://www.cyberforum.ru/cgi-bin/latex.cgi?(1+x)^{\alpha} для остатка меньшего единицы?
0
Satansoft
19 / 15 / 6
Регистрация: 27.02.2012
Сообщений: 737
03.02.2016, 15:02  [ТС] 7
Цитата Сообщение от mporro Посмотреть сообщение
Воспользоваться разложением в ряд для остатка меньшего единицы?
Прекрасно, а как это арифметически?
0
Dimension
Dimension
574 / 444 / 221
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 1
03.02.2016, 15:08 8
Лучший ответ Сообщение было отмечено Satansoft как решение

Решение

an = exp(n*log(a));
0
mporro
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
03.02.2016, 15:16 9
Satansoft
Первое, что приходит в голову...
Большое число N можно делить на два, пока остаток не окажется между 2 и 1. Т.е http://www.cyberforum.ru/cgi-bin/latex.cgi?N = 2^{k\alpha}P^\alpha, где http://www.cyberforum.ru/cgi-bin/latex.cgi?1 < P < 2 и http://www.cyberforum.ru/cgi-bin/latex.cgi?k \in Z. Тогда для вычисления http://www.cyberforum.ru/cgi-bin/latex.cgi?P^\alpha можно использовать ряд для http://www.cyberforum.ru/cgi-bin/latex.cgi?(1+x)^\alpha. Вычислить же http://www.cyberforum.ru/cgi-bin/latex.cgi?2^{k\alpha} можно через ряд для экспоненты, зная заранее только http://www.cyberforum.ru/cgi-bin/latex.cgi?\textrm{ln}2.
1
Hikari
Хитрая блондиночка $)
1451 / 964 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
03.02.2016, 15:30 10
Цитата Сообщение от Satansoft Посмотреть сообщение
однако меня интересует pow с нуля
Ну кто же тебе виноват, что тебя не поняли?
Яснее выражай свои мысли. А то может тебе и предложение Dimension вдруг ни с того ни с сего не подойдет.
Мало ли - задание такое обязательно делать циклами...
0
shmkv
1476 / 430 / 59
Регистрация: 21.07.2015
Сообщений: 1,127
03.02.2016, 16:13 11
Цитата Сообщение от Satansoft Посмотреть сообщение
Целочисленный pow делается итеративно, как-то такъ:
и то неправильно.
Satansoft, выше все верно написали. Но ты можешь и с помощью простого возведения в квадрат и некого подобия двоичного поиска найти корень с заданной точностью.

Добавлено через 41 минуту
Далеко не самый эффективный код, зато очень очевидный.
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
32
33
34
template<typename T> T my_pow_2(T val)
{
    return val * val;
}
 
template<typename T> T my_sqrt(T val)
{
    const int max_it = 32;
    T lo, hi, ret_val, pow2_res;
    if(val < 0.)
        throw std::runtime_error("sqrt value is negative");
    else if(val < 1.)
    {
        lo = val;
        hi = 1.;
    }
    else
    {
        lo = 1.;
        hi = val;
    }
    for(int it = 0; it < max_it; it++)
    {
        ret_val = (lo + hi) / 2;
        pow2_res = my_pow_2(ret_val);
        if(pow2_res < val)
            lo = ret_val;
        else if(pow2_res > val)
            hi = ret_val;
        else
            return  ret_val;
    }
    return ret_val;
}
1
03.02.2016, 16:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2016, 16:13

Реализовать возведение квадратной матрицы в степень, где показатель степени - заданный вектор
Даны квадратная матрица A порядка n и вектор b с n элементами. Получить вектор...

Не работает возведение в степень через pow
почему не работает?? не пойму #include &lt;iostream&gt; using namespace std; ...

Квадратный корень
вот очень странно! вот 2 кода. По логике не различаются НИЧЕМ! Почему 1 код не...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru