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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужен эмулятор диспечера задач. http://www.cyberforum.ru/cpp/thread419470.html
Ребят,помогите,пожалуйста,может у кого завалялся эмулятор диспечера задач на С/С++,очень надо. Нужно,что бы он создавал процесс,вводил его в состояние ожидания/выполнения и закрывал. Не откажусь от...
C++ Excel Automation in C++ Коллеги, прошу помощи! Нужен пример рабочего С++ кода, который делает следущее: - конектится к работающему в настоящий момент Excel; если Excel не запущен, то кидает exception; - конектится к... http://www.cyberforum.ru/cpp/thread419418.html
C++ Совместимость кода Code Composer Studio (CCS) с C/C++
С преподавателем друг друга не поняли. Как результат, прихожу с честно сделанными в Паскале лабами под занавес года, а он мне встречный подарок: "раз ты так редко ходишь, то почему не сделал лабы в...
C++ Как получить TID текущего потока? (библиотека pthread, компилятор g++ 4.6.1 открытый вопрос niXmanу)
Да, как? #include <windows.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> void *BusyWork(void *t) { printf("TID= %x\n", pthread_self()); printf("TID= %x\n", (unsigned...
C++ Непонятная разница в производительности http://www.cyberforum.ru/cpp/thread416848.html
Уважаемые эксперты! Есть у меня программа на С++, код которой я транслировал в двух системах: • Microsoft Visual Studio 2010 со штатным компилятором среды; • Code::Blocks версии 10.05 с пакетом...
C++ Высота бинарного дерева поиска Что неправильно в программе? Полное условие #include <iostream> #include <cstdio> #pragma comment (linker, "/stack:250000000") using namespace std; подробнее

Показать сообщение отдельно
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
28.12.2011, 17:01
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;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru