пи

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

пи

Сообщение i'm pissed » 29.12.2004 (Ср) 21:01

как вычислить пи с точностью 40 после точки
by_pissed

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.12.2004 (Ср) 21:02

Вычисление суммы бесконечного ряда. Сейчас будет пример...

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 29.12.2004 (Ср) 21:13

plz побыстрее
by_pissed

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.12.2004 (Ср) 22:09

Ни одна из найденных мной в интернете формул не даёт нормального значения пи. Проверял для начала в маткаде.
Ищу...

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 29.12.2004 (Ср) 22:10

хороше я жду....
by_pissed

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.12.2004 (Ср) 22:15

А Double на что?
Естественно, нужен алгоритм расчёта, о том и речь. И поразрядное наложение тут не при чём, нужен вполне обычный числовой ряд. Только вот какой?

Вот здесь куча примеров для вычисления разными методами:
http://sourceforge.net/project/showfile ... p_id=54167

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 29.12.2004 (Ср) 22:16

Изображение

Вообще, П = 4*Atn(1)
Короче, Яндекс -> вычисление пи -> 2ая ссылка :) (http://program.rin.ru/razdel/html/711.html)
[edit]опять на минуту опоздал =)[/edit]

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.12.2004 (Ср) 22:20

A.A.Z.
Эта формула не совсем верна. Пи сходится, но таких сложений надо 50000 для 4 верных знаков после запятой. А дальше будет накапливаться ошибка.

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 29.12.2004 (Ср) 22:21

A.A.Z. писал(а):Изображение

Вообще, П = 4*Atn(1)
Короче, Яндекс -> вычисление пи -> 2ая ссылка :) (http://program.rin.ru/razdel/html/711.html)
[edit]опять на минуту опоздал =)[/edit]

вообще она не показывает более 13 цифр после точки
by_pissed

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.12.2004 (Ср) 22:22

Да, сайтик интересный. Просто если человеку позарез надо 40 знаков после запятой, то верных из них будет не так много =)

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 29.12.2004 (Ср) 22:26

Гы :)
Вероятность того, что если мы выпишем наудачу два произвольных натуральных числа, то они окажутся взаимно простыми, равнаИзображение (Теорема Чезаро) :) Тогда нужно брать генератор псевдослучайных чисел, получать пары и проверять их на взаимную простоту, попутно подсчитывая общее количество испытанных пар и количество пар, оказавшихся взаимно простыми, а потом вычислить константу по формуле:
Изображение
где n - общее количество испытанных пар чисел, а m - количество пар чисел, оказавшихся взаимно простыми.

:P

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.12.2004 (Ср) 22:33

Код: Выделить всё
Private Sub Form_Load()
Dim sgns As Long
Const prec As Single = 0.00001 'òî÷íîñòü çàäà¸òñÿ â ôîðìàòå 1E-n,
                             'n - ÷èñëî çíàêîâ ïîñëå çàïÿòîé
Dim pi_ As Single            'ïè
Dim oldMemberN As Double     '(n-1)-é ÷ëåí ðÿäà
Dim MemberN As Double        'n-é ÷ëåí ðÿäà
Dim n As Long                'n

Do
    oldMemberN = MemberN
    n = n + 1
    MemberN = (-1) ^ n * 4 / (2 * n - 1)
    pi_ = pi_ - MemberN
Loop While Abs(MemberN - oldMemberN) > prec

Me.Show
Me.Print "n: " & n
Me.Print "pi: " & Left$(CStr(pi_), Len(CStr(prec)))
End Sub

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 29.12.2004 (Ср) 22:45

Во, нашел тему: http://sources.codenet.ru/download.php? ... 7&o=0&my=0

А вообще, если до 40 знаков, то вот:
3,1415926535897932384626433832795028841971

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 29.12.2004 (Ср) 23:08

http://www.arbuz.uz/y_pipi.html вот еще подсказали ссылку
by_pissed

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 29.12.2004 (Ср) 23:09

Кстати, я ее видел :)
--
На ссылке выше прога, где просто указываешь кол-во знаков после запятой :roll:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.12.2004 (Чт) 9:05

Ну, почти как в моём примере ;)

Только у меня надо ввести переменную lngDigits:
Код: Выделить всё
prec = 1 / (10^lngDigits)

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 30.12.2004 (Чт) 12:26

A.A.Z. писал(а):...Вероятность того, что если мы выпишем наудачу два произвольных натуральных числа, то они окажутся взаимно простыми, равнаИзображение (Теорема Чезаро)...

A.A.Z., ты прекрасно знаешь, что такой метод вычисления (правильнее сказать - нахождения) не применим для иррациональных чисел. Получающееся у тебя число будет рациональным по определению... :) Это доказывалось в одной книжке по теории вероятности, автора не помню, на примере опыта с бросанием длинной иглы на бесконечный грид.
Это так, для общего развития...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.12.2004 (Чт) 19:02

[b]Ennor[b]
Это доказывалось, уверяю, не в одной книжке :D

Так, к слову ;)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.12.2004 (Чт) 20:11

Ennor, никакое иррациональное число вообще невозможно найти (или вычислить) точно. Любая запись такого числа будет иметь конечное число знаков, и значит, будет рациональной.
Имхо твоя критика немного не по теме.
Изображение

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 30.12.2004 (Чт) 21:07

кто нибудь пробовал по примеру амеда вычислить у меня переполнее буфера было че такое
by_pissed

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 30.12.2004 (Чт) 21:16

Вообще по методу 4-3/4+5/4-7/4... можно вычислить как угодно точно, но сначала нужно написать свою математику (сложение-вычитание-деление) такой точности, тут никакой double не справится.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.12.2004 (Чт) 21:17

Сколько знаков после запятой выставлял?

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 30.12.2004 (Чт) 21:19

поста вил 10 он вычислял вычислял потом хоба говорит переполнение буфера
by_pissed

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.12.2004 (Чт) 21:38

Зацени новую версию:

У меня пи с точностью до 6 знаков 16.7 секунд меряется из IDE... В скомпиленном виде 9.6 секунд.
[updated]
7 знаков - 148.7 секунд (fast code)
[/updated]

Код: Выделить всё
Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Form_Load()
Dim sgns As Long
Const lngDigits As Long = 6 'количество знаков
Dim prec As Single           'точность
Dim pi_ As Single            'пи
Dim oldMemberN As Single     '(n-1)-й член ряда
Dim MemberN As Single        'n-й член ряда
Dim n As Long                'n

Dim time1 As Long

prec = 1 / (10 ^ lngDigits)

Me.Show

time1 = GetTickCount

Do
    oldMemberN = MemberN
    n = n + 1
    MemberN = (-1) ^ n * 4 / (2 * n - 1)
    pi_ = pi_ - MemberN
    If n Mod 100000 = 1 Then
        Me.Caption = "Итерация " & Format$(n, "### ### ### ### ###") & " - точность меньше заданной в " & Abs(MemberN - oldMemberN) / prec & " раз"
        DoEvents
    End If
Loop While Abs(MemberN - oldMemberN) > prec

Me.Print "Итераций: " & n
Me.Print "pi: " & Left$(CStr(pi_), Len(CStr(prec)))
Me.Print "Затраченное время: " & Round((GetTickCount - time1) / 1000, 1) & " секунд"
End Sub

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 30.12.2004 (Чт) 22:54

i'm pissed, так в моей ссылке код-то тоже есть! :roll:
http://sources.codenet.ru/download.php? ... 7&o=0&my=0
Прога 40 знаков менее чем за секунду сделала!
ЗЫ А 157816 знаков - 21 мин :)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.12.2004 (Чт) 22:59

Это, как я понимаю, и ко мне относится ))

Видишь, A.A.Z., всё несовершенство этой (по которой мой пример) функции?

Говоря языком математики, этот ряд сходится очень медленно. А по "той" ссылке другая, более рациональная функция. Мой код бы считал очень долго 40 знаков =)

Кстати, A.A.Z., не скажешь, сколько у тебя по моему алгоритму считает 7 знаков? У меня Цел1200, так что скорость вычисления не ахти... Вернее, ахти не ;)

i'm pissed
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 194
Зарегистрирован: 23.10.2004 (Сб) 12:01
Откуда: irkutsk

Сообщение i'm pissed » 30.12.2004 (Чт) 23:23

Amed, опять алгоритм глючит говорит переполнение бувера знаков ставил 10
by_pissed

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 31.12.2004 (Пт) 1:07

2 Amed: с "If n Mod ... " - 89.7, без - 45,6 :roll:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 31.12.2004 (Пт) 16:42

i'm pissed писал(а):Amed, опять алгоритм глючит говорит переполнение бувера знаков ставил 10


А скажи-ка, какое значение n при ошибке? У меня 10 знаков, думаю, целый день считать будет :-\

Сейчас посмотрю, где может быть переполнение...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 31.12.2004 (Пт) 16:51

[убито]
Последний раз редактировалось tyomitch 31.12.2004 (Пт) 17:09, всего редактировалось 1 раз.
Изображение

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 32

    TopList