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

Комбинаторика! Число сочитаний - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Цикл http://www.cyberforum.ru/cpp-beginners/thread634878.html
Начал изучать C++ неделю назад. Теперь начал решать некоторые задачи. И возникли у меня некоторые сложности с циклами... Требуется ваша помощь... Задача: Переведите натуральное число из двоичной...
C++ Работа с фс Всем привет, мне необходимо посчитать количество файлов в директории и в зависимости от их количества разделить их на 4 или 8 папок. Я слышала есть библиотеки fstream и boost, но как правильно это... http://www.cyberforum.ru/cpp-beginners/thread634869.html
Конструктор копирования C++
Всем привет. У меня такая проблема: есть некий класс, допустим Test: class Test { protected: int value; public : Test(int v)
Случайные(псевдослучайные) числа C++
Здравствуйте! Я знаю, что было много тем по поводу рандомных чисел в С++.Но всё же. Возникла у меня проблема с получением большого кол-ва случайных(точнее псвдослучайных) чисел, которые меньше...
C++ Ошибка при вызове функции http://www.cyberforum.ru/cpp-beginners/thread634834.html
В функции NewWords вызывается функция correct,при отладке я не могу войти в эту функцию,к тому же потом не выводится элементы объекта класса words и ID в программе на данный момент вызываются лишь 2...
C++ генерирую случайные числа srand(time(NULL)); rand()%10; Всем привет, генерирую случайные числа, подскажите, пожалуйста, почему при запуске приложения числа постоянно генерируются? Как можно сделать так, чтобы при каждом... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
13.08.2012, 16:01
Цитата Сообщение от mr_free Посмотреть сообщение
интересно а как насчет быстродействия даного метода? точность как я понял горантирована!
Не ну как- точность гарантирована настолько, насколько она вообще может быт гарантирована при работаешь с дробными числами (если работаешь с ними). Не более, но и не менее.

Насчёт скорости- чёрт его знает, откровеннно говоря. Тут надо хорошо разбираться в этом чтобы делать какие-то выводы. Вот подсчёт факориала рекурсией
C++
1
2
3
4
5
6
int fact(int n)  {
 if(n <= 1)
   return 1;
 else 
 return n * fact(n - 1);
}
А вот в цикле
C++
1
2
3
4
5
6
int fact(int n)  {
 int fact_= 1;
 for (int i= 1; i<= n; i++)
  fact_*= i;
 return fact_;
}
Явно тут нет выигрыша во времени ни в каком варианте. А вот неявно неплохой выигрыш, вот эта инструкция:
C++
1
return n * fact(n - 1);
Как ты знаешь, все переменные размещаются в ячейках памяти. И с ними происходят операции, задействуя регистры. А вот здесь можно предположить, что операции будут происходить СРАЗУ С РЕГИСТРОМ EAX (это много быстрее, нежели работать с памятью), ибо вот это значение fact(n - 1) будет всякий раз по окончании функции оказываться в регистре. И его сразу можно множить на n

Но это только предположения. Ничто не мешает компилятору задействовать ячейку памяти для данной задачи (под возвращаемое значение) и тогда скорость упадёт.
Ну и так далее.

+++++++++++++++++++++++++++++++++++++++++++++++++++

Уж лучше проверь руками. Наверное, есть какие-то специальные функции чтобы узнать, сколько времени длится та или иная программа. Но я парень простой, я бы сделал примерно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main () {
 
 for (int i= 0; i< 100; i++)
  for (int i= 0; i< 100; i++)
   for (int i= 0; i< 100; i++)
    for (int i= 0; i< 100; i++)
     fact (5);
 
 system ("pause");
 
 
 for (int i= 0; i< 100; i++)
  for (int i= 0; i< 100; i++)
   for (int i= 0; i< 100; i++)
    for (int i= 0; i< 100; i++)
     fact_ (5);
 
 system ("pause");
 
 return 0;
}
Смысл понятен, я думаю. Время отслеживается на раз, знай фиксируй.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru