Вычисление до сотого знака.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Вычисление до сотого знака.

Сообщение Deverell » 23.11.2006 (Чт) 13:35

есть формула:
pi=2*(2/1*2/3*4/3*4/5*6/5*6/7*8/7)
Есть у кого-нибудь идеи,как можно провести расчеты до 100-го знака???
Или может кто-нибудь знает более совершенную формулу или алгоритм по рассчету числа pi???

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.11.2006 (Чт) 14:05

Эта формула становится неточной задолго до 100 знака.
Восьмиугольник -- слишком грубое приближение, даст ошибку уже на третьем знаке.
Lasciate ogni speranza, voi ch'entrate.

Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Сообщение Deverell » 23.11.2006 (Чт) 14:43

alibek
знаешь "поумнее" формулу?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.11.2006 (Чт) 15:42

Причем тут поумнее?
Формула считает с той точностью, с которой ты выберешь N.
Lasciate ogni speranza, voi ch'entrate.

Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Сообщение Deverell » 23.11.2006 (Чт) 16:02

Это для этой формулы N выбирать надо:pi=4*(1/1-1/3+1/5-1/7+1/9-….)
Это не столь важно.
Как сделать, чтобы он считал до 300-го знака?

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 23.11.2006 (Чт) 16:11

Гм...............
Код: Выделить всё

Dim pi As Double
dim s As String
pi=2*(2/1*2/3*4/3*4/5*6/5*6/7*8/7)
s=CInt(pi*100)/100
msgbox s

Вроде так...

_ae_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 165
Зарегистрирован: 08.10.2006 (Вс) 14:37

Сообщение _ae_ » 23.11.2006 (Чт) 16:15

:?

Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Сообщение Deverell » 23.11.2006 (Чт) 16:19

ницего кроме3,34 не показал...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.11.2006 (Чт) 16:32

Debugger видимо не осилил чтение топика...
Deverell, естественно вот этот код

Код: Выделить всё
s=CInt(pi*100)/100


больше двух знаков после запятой не покажет по определению
Весь мир матрица, а мы в нем потоки байтов!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.11.2006 (Чт) 17:02

Deverell писал(а):Это для этой формулы N выбирать надо:pi=4*(1/1-1/3+1/5-1/7+1/9-….)

Ты думать пробовал?
Или ты не видишь, что формула относится к вписанным и описанным правильным многоугольникам.
N -- это число сторон многоугольника.
Lasciate ogni speranza, voi ch'entrate.

August
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 25.08.2006 (Пт) 10:48
Откуда: C сибири

Сообщение August » 23.11.2006 (Чт) 17:06

на тебе ПИ

3.14159235959337332640673822570842421870593265598024690
6552049683416344089789068475237805981571125029387686062
4673188325650310260348017353037507287559741891028695865
48197024241906686830981813108269063793022376385475028538
39385092453592019148747614349583130497832722636129106169
443221761920176454563831745851684321691766427896810965901
112798977399787102891355739487908433311450311756802892268
981078453770726294564316856435700374584201612826374912855
59273951738815850437806694754603297770690392403992688

хватит надеюсь :P

взял я этот тут http://www.arbuz.uz/u_piclub.html , кстати забавно почитать было)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.11.2006 (Чт) 17:13

Lasciate ogni speranza, voi ch'entrate.

August
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 25.08.2006 (Пт) 10:48
Откуда: C сибири

Сообщение August » 23.11.2006 (Чт) 17:52

alibek
Супер )

Deverell
Теперь пользуй
Код: Выделить всё
MID

и никакие формулы тебе не страшны)

Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Сообщение Deverell » 24.11.2006 (Пт) 7:46

спасиб конечно,ток мне нужно чтобы он сам считал...
August
А как именно его использовать?
MID,а дальше что?

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 24.11.2006 (Пт) 8:08

Deverell писал(а):спасиб конечно,ток мне нужно чтобы он сам считал...

А смысл?

Deverell писал(а):MID,а дальше что?

Mid(string, start[, length]) - Возвращает строку, извлечённую из строки string, начиная с символа в позиции start, и содержащую length символов

Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Сообщение Deverell » 24.11.2006 (Пт) 9:48

shady
Время расчета Пи скажем до миллиного(так много,для большей разнице во времени) знака на каждом комрьютере будет разным: простой способ сравнить способность ЦП и ОЗУ.

Только я так и не понял,что мне делать с MID??? :?

August
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 25.08.2006 (Пт) 10:48
Откуда: C сибири

Сообщение August » 24.11.2006 (Пт) 9:54

Код: Выделить всё
dim PI as string = "число ПИ, сохрани его тут как текст" ' например 3.1415...
dim PI_resultat as string
dim i as integer  = 100 ' до какого символа

PI_resultat = mid(PI,1,i+2)
msgbox(PI_resultat)

Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Сообщение Deverell » 24.11.2006 (Пт) 10:04

Он записи с равно не признает :(
говорит:End of statement

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.11.2006 (Пт) 10:26

andreymp, ошибка у тебя. Седьмой знак -- 6, а не 3.
Lasciate ogni speranza, voi ch'entrate.

Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Сообщение Deverell » 24.11.2006 (Пт) 10:32

Блин,если здесь все так сложно,может взять какую-нибудь другую операцию...Есть какие-нибудь предложения?

August
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 25.08.2006 (Пт) 10:48
Откуда: C сибири

Сообщение August » 24.11.2006 (Пт) 10:49

Ты принцип того кода который я написал вообще понимаешь??

dim PI as string
dim PI_resultat as string
dim i as integer

i = 3 ' до какого символа
PI = "3.1415" ' например 3.1415... дальше сам продлишь

PI_resultat = mid(PI,1,i+2)

msgbox(PI_resultat)


Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Сообщение Deverell » 24.11.2006 (Пт) 11:20

Так он не считает, а просто пишет уже сохраненные значения...

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 24.11.2006 (Пт) 11:43

Куча методов вычисления pi
http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fibpi.html
Моду создают модоки, а распространяют модозвоны.

August
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 25.08.2006 (Пт) 10:48
Откуда: C сибири

Сообщение August » 24.11.2006 (Пт) 12:02

Deverell писал(а):Так он не считает, а просто пишет уже сохраненные значения...


извини... промахнулся, там где ты быстродействие компа с помощью программы решил...

Deverell
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 22.11.2006 (Ср) 16:08

Сообщение Deverell » 24.11.2006 (Пт) 12:12

Мне не нужны формулы вычисления.Мне нужна функция,кторая не будет ограничивать расчеты до 14 знаков.

Есть такой вариант:
x = 22
y = 7
For i = 1 To 1000000
z = x \ y : Print z;
z1 = (x Mod y) * 10
x = z1
Next i

Вот только слижком уж нечетко получается. . .

_ae_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 165
Зарегистрирован: 08.10.2006 (Вс) 14:37

Сообщение _ae_ » 24.11.2006 (Пт) 14:00

Deverell
Да дело ведь не в формуле. Дело в том, что тип double не вмещает в себя 100 знаков

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 24.11.2006 (Пт) 14:19

Deverell писал(а):Мне не нужны формулы вычисления.Мне нужна функция,кторая не будет ограничивать расчеты до 14 знаков.

Есть такой вариант:
x = 22
y = 7
For i = 1 To 1000000
z = x \ y : Print z;
z1 = (x Mod y) * 10
x = z1
Next i

Вот только слижком уж нечетко получается. . .



да уж... получается весьма забавная последовательность из повторяющихся 142857, что весьма далеко от Pi

_ae_, автору не нужен тип Double, автор хочет получить последовательность цифр из которых состоит число Pi
Весь мир матрица, а мы в нем потоки байтов!

August
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 25.08.2006 (Пт) 10:48
Откуда: C сибири

Сообщение August » 24.11.2006 (Пт) 14:45

!Viper! писал(а):да уж... получается весьма забавная последовательность из повторяющихся 142857, что весьма далеко от Pi


согласен, полная чушь получается

След.

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

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

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 43

    TopList