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

Программа вычисления n -го числа, числа Пи - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Валидность кода http://www.cyberforum.ru/cpp-beginners/thread867094.html
Почему такой код считается валидным? int a = { 0, }; int main() { } https://ideone.com/Qomf3o Если кто не заметил, суть в запятой при инициализации массива.
C++ Вывести номера строк, в которых есть нулевые элементы (Используя функции)Даны 3 двумерных массива А, В, С. В каких массивах есть хотя бы один нулевой элемент? Вывести номера строк, в которых есть нулевые элементы http://www.cyberforum.ru/cpp-beginners/thread867088.html
C++ Чтение из файла и запись в файл
Создайте текстовый файл целых чисел (значения вводятся с клавиатуры). Проанализировав в программе созданный файл, создайте еще 2 файла: •содержащий однозначные числа и их количество, •содержащий двузначные числа и их количество. Выведите содержимое каждого файла на экран.
C++ Вводится k-й день невисокосного года - определить, является ли этот день рабочим.
Вводится k-й (1<=k<=365) день невисокостного года, в котором 1 января – понедельник. Определить, является ли этот день рабочим, если рабочий работает только по четным дням и четным неделям. Вывести результат. Помогите пожалуйста или намекните как написать.
C++ Случайные числа (координаты) для объекта OpenGL http://www.cyberforum.ru/cpp-beginners/thread867066.html
Ребят, пишу курсовую на с++ + ogl. У меня в игре (при каждом ее запуске) должен появляться объект в разных местах поля. Использую такой код генератора рандомных чисел: srand(time(NULL)); const int m = rand()%(19+1); m присваиваю как координату объекта. Столкнулся с такой проблемой: если размещать этот код в функции on_paint (отвечающую за перерисовку), то числа генерируются постоянно и...
C++ Turbo Pascal -> C++ (подсчет суммы мест, на которых в словах текста стоит заданная буква) Задание. Написать программу для подсчета суммы мест, на которых в словах текста стоит заданная буква. program zadacha5; Var s, c: string; j, sum: integer; begin writeln ('vvedite text'); readln (s); writeln ('vvedite bukvu texta'); readln (c); подробнее

Показать сообщение отдельно
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
16.05.2013, 15:11     Программа вычисления n -го числа, числа Пи
Здравствуйте! Прочитал на хабре интересную статью про вычисление n-го знака числа Пи Ссылка на статью, к статье прилагается код на Си, но у меня в Visual Studia 2010 код не компилируется, получаю ошибку:


error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию

Код на Си:

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
/*  
    This program implements the BBP algorithm to generate a few hexadecimal
    digits beginning immediately after a given position id, or in other words
    beginning at position id + 1.  On most systems using IEEE 64-bit floating-
    point arithmetic, this code works correctly so long as d is less than
    approximately 1.18 x 10^7.  If 80-bit arithmetic can be employed, this limit
    is significantly higher.  Whatever arithmetic is used, results for a given
    position id can be checked by repeating with id-1 or id+1, and verifying 
    that the hex digits perfectly overlap with an offset of one, except possibly
    for a few trailing digits.  The resulting fractions are typically accurate 
    to at least 11 decimal digits, and to at least 9 hex digits.  
*/
 
/*  David H. Bailey     2006-09-08 */
 
#include <stdio.h>
#include <math.h>
 
main()
{
  double pid, s1, s2, s3, s4;
  double series (int m, int n);
  void ihex (double x, int m, char c[]);
  int id = 1000000;
#define NHX 16
  char chx[NHX];
 
/*  id is the digit position.  Digits generated follow immediately after id. */
 
  s1 = series (1, id);
  s2 = series (4, id);
  s3 = series (5, id);
  s4 = series (6, id);
  pid = 4. * s1 - 2. * s2 - s3 - s4;
  pid = pid - (int) pid + 1.;
  ihex (pid, NHX, chx);
  printf (" position = %i\n fraction = %.15f \n hex digits =  %10.10s\n",
  id, pid, chx);
}
 
void ihex (double x, int nhx, char chx[])
 
/*  This returns, in chx, the first nhx hex digits of the fraction of x. */
 
{
  int i;
  double y;
  char hx[] = "0123456789ABCDEF";
 
  y = fabs (x);
 
  for (i = 0; i < nhx; i++){
    y = 16. * (y - floor (y));
    chx[i] = hx[(int) y];
  }
}
 
double series (int m, int id)
 
/*  This routine evaluates the series  sum_k 16^(id-k)/(8*k+m) 
    using the modular exponentiation technique. */
 
{
  int k;
  double ak, eps, p, s, t;
  double expm (double x, double y);
#define eps 1e-17
 
  s = 0.;
 
/*  Sum the series up to id. */
 
  for (k = 0; k < id; k++){
    ak = 8 * k + m;
    p = id - k;
    t = expm (p, ak);
    s = s + t / ak;
    s = s - (int) s;
  }
 
/*  Compute a few terms where k >= id. */
 
  for (k = id; k <= id + 100; k++){
    ak = 8 * k + m;
    t = pow (16., (double) (id - k)) / ak;
    if (t < eps) break;
    s = s + t;
    s = s - (int) s;
  }
  return s;
}
 
double expm (double p, double ak)
 
/*  expm = 16^p mod ak.  This routine uses the left-to-right binary 
    exponentiation scheme. */
 
{
  int i, j;
  double p1, pt, r;
#define ntp 25
  static double tp[ntp];
  static int tp1 = 0;
 
/*  If this is the first call to expm, fill the power of two table tp. */
 
  if (tp1 == 0) {
    tp1 = 1;
    tp[0] = 1.;
 
    for (i = 1; i < ntp; i++) tp[i] = 2. * tp[i-1];
  }
 
  if (ak == 1.) return 0.;
 
/*  Find the greatest power of two less than or equal to p. */
 
  for (i = 0; i < ntp; i++) if (tp[i] > p) break;
 
  pt = tp[i-1];
  p1 = p;
  r = 1.;
 
/*  Perform binary exponentiation algorithm modulo ak. */
 
  for (j = 1; j <= i; j++){
    if (p1 >= pt){
      r = 16. * r;
      r = r - (int) (r / ak) * ak;
      p1 = p1 - pt;
    }
    pt = 0.5 * pt;
    if (pt >= 1.){
      r = r * r;
      r = r - (int) (r / ak) * ak;
    }
  }
 
  return r;
}
Помогите исправить ошибку и проверить код
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru