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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
#1

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

16.05.2013, 15:11. Просмотров 1630. Ответов 4
Метки нет (Все метки)

Здравствуйте! Прочитал на хабре интересную статью про вычисление 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 до 50, которые кратные 4 и все простые числа от 1 до 50

программа вычисления факториала любого числа - C++
помогите написать программу на C++!!! надо написать программу, которая вычислит факториал любого числа. данные читает из файла и...

Программа для вычисления загаданного числа - C++
Нужно написать программу для угадывания числа. 1&lt;число&lt;100; Вопросы вводятся типо таких:&quot;ваше число больше 50?&quot;. Помогите написать, не...

Программа которая складывает 2 числа.Числа вбиты в программу заранее. Не получается. Плохо знаю этот язык - C++
Помогите пожалуйста(((

Напишите программа, которая вводит два целых числа и выводит на экран остаток от деления первого числа на втор - C++
1.Напишите программа, которая вводит два целых числа и выводит на экран остаток от деления первого числа на второе. Ввод 10 4 11...

Программа которая запрашивает 2 числа и выводит на стандартное устройство вывода все числа, которые находятся между ними - C++
вот мой код, только вот если вводишь 9 и 100, идёт сначала 9 и до 100, как сделать что бы сначало 10 и до 100) #include &lt;iostream&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
16.05.2013, 15:28     Программа вычисления n -го числа, числа Пи #3
В какой строке ошибка то?
В 20-й перед main() поставь int
Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
16.05.2013, 15:42  [ТС]     Программа вычисления n -го числа, числа Пи #4
treyk,
lazybiz,

Спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2016, 12:18     Программа вычисления n -го числа, числа Пи
Еще ссылки по теме:

Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k. - C++
Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k. И вновь заранее благодарю,...

Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел? - C++
Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел?

Ввести в программу строку (числа, латиница), считать только числа, записать числа в массив - C++
Нужна помощь! Срочно! Нужно ввести в программу строку (числа, латиница), считать только числа, записать числа в массив. Помогите,...

Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми - C++
Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми. ...

Функция вычисления процента от числа х - C++
Помогите пожалуйста с задачкой;( Банк предлагает договор сроком на 12 месяцев, соответственно которому физическим лицам начисляется...

Написать функцию вычисления знака числа - C++
Здравствуйте! Прошу прощения за глупый вопрос, мог бы спросить и у препода, но ждать долго, а сдать хочу досрочно) Задание прикрепил ниже. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
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 -го числа, числа Пи
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru