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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
16.05.2013, 15:11     Программа вычисления n -го числа, числа Пи #1
Здравствуйте! Прочитал на хабре интересную статью про вычисление 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;
}
Помогите исправить ошибку и проверить код
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2013, 15:11     Программа вычисления n -го числа, числа Пи
Посмотрите здесь:

C++ Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k.
Получить два целых числа, после этого вывести большее на печать C++
C++ Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел?
программа вычисления факториала любого числа C++
программа для вычисления кратного числа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
treyk
 Аватар для treyk
53 / 53 / 7
Регистрация: 28.06.2012
Сообщений: 224
Завершенные тесты: 1
16.05.2013, 15:26     Программа вычисления n -го числа, числа Пи #2
Цитата Сообщение от Delvox Посмотреть сообщение
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
C++
1
int main()
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,017
Записей в блоге: 10
Завершенные тесты: 1
16.05.2013, 15:28     Программа вычисления n -го числа, числа Пи #3
В какой строке ошибка то?
В 20-й перед main() поставь int
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
16.05.2013, 15:42  [ТС]     Программа вычисления n -го числа, числа Пи #4
treyk,
lazybiz,

Спасибо
abwin
1 / 1 / 0
Регистрация: 10.10.2015
Сообщений: 5
13.05.2016, 12:18     Программа вычисления n -го числа, числа Пи #5
А может кто подсказать, что мы в итоге получаем после вывода:

Пример для 6-ой позиции:

position = 6
fraction = 0.533289136557027
hex digits = 8885A308D3

Третья позиция, я так понимаю, это шестнадцатиричное число, переведя которое в десятичное получаем 586357606611. Собственно на шестой позиции числа пи(если считать от запятой) находится число 2. И на данный момент я не вижу никакой логики((
Yandex
Объявления
13.05.2016, 12:18     Программа вычисления n -го числа, числа Пи
Ответ Создать тему
Опции темы

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