Форум программистов, компьютерный форум CyberForum.ru

Корень и модуль - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
marik2012
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 41
20.05.2012, 23:30     Корень и модуль #1
как записать без библиотеки <math.h> корень (x), модуль (x).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2012, 23:30     Корень и модуль
Посмотрите здесь:

Квадратный корень C++
C++ Квадратный корень
Корень C++
C++ Квадратный корень из 5
C++ Квадратный корень
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Almaz_KG
6 / 6 / 0
Регистрация: 15.05.2012
Сообщений: 105
20.05.2012, 23:38     Корень и модуль #2
В смысле вычислить корень или выявить модуль??
marik2012
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 41
20.05.2012, 23:54  [ТС]     Корень и модуль #3
вычеслить корень.
тобишь БЕЗ библиотеки вводишь число,а оно ищет корень. И вводишь число например -2, а оно выводит 2. По модулю.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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;
}
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;
}
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;
}
в корне (а) я так понимаю это выражение, в модуле (а) тоже?
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;
}
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;
}
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;
}
исправь функцию и не будет ошибки.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
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:
Пока я тут хардкором занимался, кто-то написал возведение в степень. Это вроде $#$^%$$# не корень...
marik2012
0 / 0 / 0
Регистрация: 05.05.2012
Сообщений: 41
21.05.2012, 00:41  [ТС]     Корень и модуль #11
только вот корень с 10 равен 3)
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
21.05.2012, 00:46     Корень и модуль #12
Может потому что int != float?

Добавлено через 3 минуты
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Update:
Пока я тут хардкором занимался, кто-то написал возведение в степень. Это вроде $#$^%$$# не корень...
Извиняюсь, просто pow -> power -> степень. И она тоже считается в цикле... Не углядел немного рассчёт. Но всё равно считать sqrt так вот - не правильно...
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;
}
так тоже не работает.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
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));
}
Матчасть.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
21.05.2012, 01:03     Корень и модуль #15
Ничего, что pow (power) - это возведение в степень, а извлечение квадратного корня - sqrt (square root)?
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
21.05.2012, 01:04     Корень и модуль #16
Цитата Сообщение от gray_fox Посмотреть сообщение
Ничего, что pow (power) - это возведение в степень, а извлечение квадратного корня - sqrt (square root)?
Мне тоже это интересно, но чего с них взять?.. Бывают и такие заблуждения... Просто я уже пытался обратить на это внимание...
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
21.05.2012, 01:16     Корень и модуль #17
Хм... про кваку был не в теме, спасибо.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
21.05.2012, 01:20     Корень и модуль #18
Да не за что =) Всегда рад помочь в плане просвещения. Мне тоже этот форум часто помогает.

Мне больше интересно, как это магическое число вообще работает?.. Загадка вселенной, ... .
Но работает ОЧЕНЬ быстро. Правда не совсем точно, но если добавить ещё добавить итерацию по Ньютону точность возрастёт =) И хорошо так возрастёт.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
21.05.2012, 01:37     Корень и модуль #19
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Но работает ОЧЕНЬ быстро. Правда не совсем точно
Думаю там высокая точность не особо нужна. Вообще, оптимизация в геймдеве - больная тема)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2012, 02:12     Корень и модуль
Еще ссылки по теме:

C++ Корень
Корень n-й степени C++

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

Или воспользуйтесь поиском по форуму:
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
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))
Ужасно, что могу сказать...
Yandex
Объявления
21.05.2012, 02:12     Корень и модуль
Ответ Создать тему
Опции темы

Текущее время: 21:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru