Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
marik2012
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 41
#1

Корень и модуль

20.05.2012, 23:30. Просмотров 2118. Ответов 19
Метки нет (Все метки)

как записать без библиотеки <math.h> корень (x), модуль (x).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2012, 23:30
Ответы с готовыми решениями:

Найти корень уравнения методом последовательных итераций.Второй корень вычисляет неверно
Задание:Написать программу для вычисления методом последовательных итераций...

Корень
Пишу прогу для нахождения Среднее геометрического у меня получается что корень...

Корень
Подскажите как вычисть корень 3..н степени.

Обратный корень
Исходные данные Входной поток содержит набор целых чисел Ai (0 ≤ Ai ≤ 1018),...

Квадратный корень из 5
Здравствуйте, подскажите, пожалуйста, алгоритм вычисления квадратного корня из...

19
Almaz_KG
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 105
20.05.2012, 23:38 #2
В смысле вычислить корень или выявить модуль??
0
marik2012
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 41
20.05.2012, 23:54  [ТС] #3
вычеслить корень.
тобишь БЕЗ библиотеки вводишь число,а оно ищет корень. И вводишь число например -2, а оно выводит 2. По модулю.
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
21.05.2012, 00:08 #4
Модуль просто, примерно так:
C++
1
2
3
4
template<typename Type>
Type abs(Type const& value) {
    return value < static_cast<Type>(0) ? -value : value;
}
0
WebPirat
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 5
21.05.2012, 00:14 #5
Можно так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int pow(int a)
{
    int b=0;
    for(int i=1;;i++)
    {
        b=a/i;
        if(b==i)
            break;
    }       
    return b;
}
int modul(int a)
{
    if(a<=-1)
        a*=-1;
    return a;
}
0
marik2012
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 41
21.05.2012, 00:21  [ТС] #6
Цитата Сообщение от WebPirat Посмотреть сообщение
Можно так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int pow(int a)
{
    int b=0;
    for(int i=1;;i++)
    {
        b=a/i;
        if(b==i)
            break;
    }       
    return b;
}
int modul(int a)
{
    if(a<=-1)
        a*=-1;
    return a;
}
в корне (а) я так понимаю это выражение, в модуле (а) тоже?
0
WebPirat
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 5
21.05.2012, 00:25 #7
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
#include <iostream>
using namespace std;
int pow(int);//функция которая вычисляет корень
int modul(int);//функция которая вычисляет модуль
int main()
{
    int a;
    cin>>a;
    //Если хотим узнать модуль  
    cout<<modul(a)<<endl;
        //Если хотим посчитать корень
        cin>>a;
    cout<<pow(a)<<endl;
 
    return 0;
}
int pow(int a)
{
    int b=0;
    for(int i=1;;i++)
    {
        b=a/i;
        if(b==i)
            break;
    }       
    return b;
}
int modul(int a)
{
    if(a<=-1)
        a*=-1;
    return a;
}
0
marik2012
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 41
21.05.2012, 00:32  [ТС] #8
начало понял,а зачем 17 строка и ниже..это и есть запись корня и модуля?

Добавлено через 3 минуты
В такой программе пишет что есть ошибка.
[PHP]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int pow(int);
 
int main()
 
{
    int a;  //Если хотим посчитать корень
        cin>>a;
    cout<<pow(a)<<endl;
 
    return 0;
}
{
    int b=0;
    for(int i=1;;i++)
    {
        b=a/i;
        if(b==i)
            break;
    }       
    return b;
}
0
WebPirat
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 5
21.05.2012, 00:35 #9
Сверху объявляется прототип функции, а внизу она уже описывается, просто если не будет прототипа программа выдаст ошибку на этапе компиляции.
Конечно есть,
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
#include <iostream>
using namespace std;
int pow(int);
 
int main()
 
{
    int a;  //Если хотим посчитать корень
        cin>>a;
    cout<<pow(a)<<endl;
 
    return 0;
}
int pow(int a)
{
    int b=0;
    for(int i=1;;i++)
    {
        b=a/i;
        if(b==i)
            break;
    }       
    return b;
}
исправь функцию и не будет ошибки.
0
AnyOne697
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
Завершенные тесты: 1
21.05.2012, 00:39 #10
Хардкор, только хардкор!

C++
1
2
3
4
5
6
#define abs(x) ((x < 0) ? -(x) : (x))
 
inline float sqrt(float number){
    long i;float y;
    return number*(y=*(float *)(&(i=0x5f3759df-((*(long *)&number)>>1)))) * (1.5f - (number*0.5f * y * y));
}
Update:
Пока я тут хардкором занимался, кто-то написал возведение в степень. Это вроде $#$^%$$# не корень...
0
marik2012
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 41
21.05.2012, 00:41  [ТС] #11
только вот корень с 10 равен 3)
0
AnyOne697
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
Завершенные тесты: 1
21.05.2012, 00:46 #12
Может потому что int != float?

Добавлено через 3 минуты
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Update:
Пока я тут хардкором занимался, кто-то написал возведение в степень. Это вроде $#$^%$$# не корень...
Извиняюсь, просто pow -> power -> степень. И она тоже считается в цикле... Не углядел немного рассчёт. Но всё равно считать sqrt так вот - не правильно...
0
marik2012
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 41
21.05.2012, 00:58  [ТС] #13
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
#include <iostream>
using namespace std;
 
double pow(float a)
{
    int b=0;
    for(int i=1;;i++)
    {
        b=a/i;
        if(b==i)
            break;
    }       
    return b;
}
 
 
int main()
 
{
    int a;  //Åñëè õîòèì ïîñ÷èòГ*ГІГј êîðåГ*Гј
    cout<<" vvedit6 a:";
        cin>>a;
    cout<<pow(a)<<endl;
 
    return 0;
}
так тоже не работает.
0
AnyOne697
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
Завершенные тесты: 1
21.05.2012, 01:01 #14
А чем не нравиться

C++
1
2
3
4
5
inline float sqrt(float number){
    long i;float y;
    return number*(y=*(float *)(&(i=0x5f3759df-((*(long *)&number)>>1))))
            *(1.5f-(number*0.5f*y*y));
}
Матчасть.
1
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
21.05.2012, 01:03 #15
Ничего, что pow (power) - это возведение в степень, а извлечение квадратного корня - sqrt (square root)?
1
AnyOne697
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
Завершенные тесты: 1
21.05.2012, 01:04 #16
Цитата Сообщение от gray_fox Посмотреть сообщение
Ничего, что pow (power) - это возведение в степень, а извлечение квадратного корня - sqrt (square root)?
Мне тоже это интересно, но чего с них взять?.. Бывают и такие заблуждения... Просто я уже пытался обратить на это внимание...
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
21.05.2012, 01:16 #17
Хм... про кваку был не в теме, спасибо.
0
AnyOne697
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
Завершенные тесты: 1
21.05.2012, 01:20 #18
Да не за что =) Всегда рад помочь в плане просвещения. Мне тоже этот форум часто помогает.

Мне больше интересно, как это магическое число вообще работает?.. Загадка вселенной, ... .
Но работает ОЧЕНЬ быстро. Правда не совсем точно, но если добавить ещё добавить итерацию по Ньютону точность возрастёт =) И хорошо так возрастёт.
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
21.05.2012, 01:37 #19
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Но работает ОЧЕНЬ быстро. Правда не совсем точно
Думаю там высокая точность не особо нужна. Вообще, оптимизация в геймдеве - больная тема)
0
AnyOne697
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
Завершенные тесты: 1
21.05.2012, 02:12 #20
Цитата Сообщение от gray_fox Посмотреть сообщение
Вообще, оптимизация в геймдеве - больная тема
Сейчас, к сожалению, я наблюдаю обратное. Это раньше, когда разрабатывался Quake III был важен чуть ли не каждый такт - именно так Id Software дали по тем временам невероятную картинку. Несколько иначе подошли к делу Blizzard - они решили сделать огромное количество спрайтов с детальной анимацией - так получились StarCraft и Diablo II. Первый, кстати, не плохо (не плохо, это значит именно "не плохо", никак не "хорошо" или "отлично") смотрится даже сейчас только благодаря хорошей анимацией. Вообще метелица решила, что лучше проработает исторический момент, остальное доделает воображение. Что сказать - у них это получилось

ИМХО:
Но сейчас проекты настолько большие, что когда кто-то разрабатывает небольшой модуль, например, рассчёта шейдера луча, то этот кто-то, конечно, используeт std::sqrt(number), но не
number*(y=(y=*(float *)(&(i=0x5f3759df-((*(long *)&number)>>1))))*(1.5f - (number*0.5f * y * y)))*(1.5f - (number*0.5f * y * y))
Ужасно, что могу сказать...
0
21.05.2012, 02:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2012, 02:12

Обратный корень
Пожалуйста, помогите решить задачу, не получается уже месяц (если решать с...

Корень n-й степени
Всем доброго времени суток. Как взять корень n-й степени? При использовании...

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


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

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

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