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

Что такое compile-time алгоритмы и для чего они нужны? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Непонятная разница в производительности http://www.cyberforum.ru/cpp/thread416848.html
Уважаемые эксперты! Есть у меня программа на С++, код которой я транслировал в двух системах: • Microsoft Visual Studio 2010 со штатным компилятором среды; • Code::Blocks версии 10.05 с пакетом MinGW и компилятором g++ версии 4.6.1. Проверка проводилась на следующей платформе: • Процессор Intel® Core™ i3 CPU 530 @2.93, индекс производительности 6.9; • Оперативная память 4 Гб, индекс...
C++ Странная ошибка при сборке nasm всем привет. нужно собрать nasm для вендус. использую MSYS+MinGW. configure прошел успешно. при сборке получаю такое: nasm.h:476:5: error: expected identifier before numeric constant nasm.h:882:26: error: 'PREFIX_ENUM_LIMIT' undeclared here (not in a function) http://www.cyberforum.ru/cpp/thread356140.html
Модификация AST дерева GCC C++
всем привет. есть задумка реализовать для GCC плагин расширяющий/добавляющий некоторые возможности С++ языку. проблемы со сбором информации из AST нет. могу получить любую необходимую мне информацию о единице трансляции. но проблема в модификации AST. вопрос в том, может ли кто-то подсказать ссылки/доки/исходники по теме? спасибо.
C++ Работа с const
Объясните пожалуйста разницу между вызовами двух функций: int func(const char *name) и int func(char *name) Я плохо понимаю - что дает этот спецификатор const? Что может произойти если его не указать?
C++ Новый стандарт принят! http://www.cyberforum.ru/cpp/thread341611.html
Barry Hedquist wrote: Just received word from ANSI that the C++ FDIS has officially been approved by ISO in a unanimous vote. 21 of 21 National Bodies voted to APPROVE. Под FDIS подразумевается N3290 (отличия которого от N3291 незначительны — см. comp.std.c++ — difference between documents n3290 and n3291->...
C++ mpl проход по элементам Пытался написать вывод элементов vector_c не через for_each. Не вышло. Кто подскажет как сие сделать наиболее удобно? Пример вектора. typedef boost::mpl::vector_c<char, 'h', 'e', 'l', 'l', 'o'>::type vector; Спасибо. подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
28.12.2011, 17:01     Что такое compile-time алгоритмы и для чего они нужны?
Evg,
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
 
template <int64_t A, int64_t B>
struct rational_t
{
  const static int64_t a = A, b = B;
  static double get() { return (double)a/b; }
};
 
#define RATIONAL(A1, A2) rational_t<(int)(A1##A2), pow<10, sizeof(#A2)-1>::value>
 
template <int V, unsigned D>
struct pow
{
  const static int value = V * pow<V, D - 1>::value;
};
template <int V>
struct pow<V, 0>
{
  const static int value = 1;
};
 
template <class R>
struct require_reduce
{
  const static int64_t max = (1ll<<31);
  const static bool value = (R::a >= max) || (R::b >= max);
};
 
template<bool, class R>
struct reduce_accurate;
 
template <bool, class R>
struct reduce_inaccurate
{
  typedef rational_t<(R::a >> 1), (R::b >> 1)> type_;
  typedef typename reduce_accurate<require_reduce<type_>::value, type_>::type type;
};
 
template <class R>
struct reduce_inaccurate<false, R>
{
  typedef R type;
};
 
template <int64_t m, int64_t n>
struct gcd;
template <int64_t a>
struct gcd<a, 0>
{
  static const int64_t value = a;
};
template <int64_t a, int64_t b>
struct gcd
{
  static const int64_t value = gcd<b, a % b>::value;
};
 
 
template <bool, class R>
struct reduce_accurate
{
   const static int64_t new_a = R::a / gcd<R::a, R::b>::value;
   const static int64_t new_b = R::b / gcd<R::a, R::b>::value;
 
   typedef rational_t<new_a, new_b> new_type;
   typedef typename reduce_inaccurate<require_reduce<new_type>::value, new_type>::type type;
};
 
template <class R>
struct reduce_accurate<false, R>
{
  typedef typename reduce_inaccurate<require_reduce<R>::value, R>::type type;
};
 
template <class R>
struct reduce
{
   typedef typename reduce_accurate<require_reduce<R>::value, R>::type type;
};
 
template <class R1, class R2>
struct plus
{
  typedef rational_t<R1::a * R2::b + R2::a * R1::b, R1::b * R2::b> type1;
  typedef typename reduce<type1>::type type;
};
 
template <class R1, class R2>
struct minus
{
  typedef rational_t<R1::a * R2::b - R2::a * R1::b, R1::b * R2::b> type1;
  typedef typename reduce<type1>::type type;
};
template <class R1, class R2>
struct mult
{
  typedef rational_t<R1::a * R2::a, R1::b * R2::b> type1;
  typedef typename reduce<type1>::type type;
};
template <class R1, class R2>
struct divide
{
  typedef rational_t<R1::a * R2::b, R1::b * R2::a> type1;
  typedef typename reduce<type1>::type type;
};
 
template <int64_t p, class res, class x>
struct sqrt_eval
{
  typedef typename divide<x, res>::type t1;
  typedef typename plus<res, t1>::type t2;
  typedef typename divide<t2, rational_t<2,1> >::type tmp;
  typedef typename sqrt_eval<p-1, tmp, x>::type type;
};
template <class res, class x>
struct sqrt_eval<0, res, x>
{
  typedef res type;
};
 
template <class x>
struct sqrt
{
  typedef typename divide< typename plus<x, rational_t<1,1> >::type, rational_t<2,1> >::type res;
  typedef typename sqrt_eval<15, res, x>::type type;
};
template <int64_t a>
struct sqrt< rational_t<0, a> >
{
  static const int64_t value = 0;
};
 
int main()
{
   std::cout.precision(15);
   const double s = sqrt<RATIONAL(2, 0)>::type::get();
   std::cout << s << std::endl;
   const double t = sqrt<RATIONAL(1, 75)>::type::get();
   std::cout << t << std::endl;
}
 
Текущее время: 16:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru