https://www.purebasic.fr/english/viewtopic.php?t=61315
все ссылки пропали, как положено.
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » OpenSource » есть у кого GMP 6.0.0a?
https://www.purebasic.fr/english/viewtopic.php?t=61315
все ссылки пропали, как положено.
Разобрался немношк и вытащил библиотеки
Результат можно получить другим способом, это для изучения:
Structure mpz mp_alloc.l mp_size.l mp_limb.l EndStructure ImportC "libgmp-3.lib" mpz_init(*integer.mpz) As "___gmpz_init" mpz_clear(*integer.mpz) As "___gmpz_clear" mpz_set_str.l(*rop.mpz,str.s,base.l) As "___gmpz_set_str" mpz_mul(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_mul" mpz_get_str(*string, base.i, *op.mpz) As "___gmpz_get_str" mpz_add(*rop.mpz, *op1.mpz, *op2.mpz) As "___gmpz_add" mpz_init_set_ui(*rop.mpz, op.i) As "___gmpz_init_set_ui" EndImport i.mpz j.mpz r.mpz mpz_init(@i) mpz_init(@j) mpz_init(@r) h$="FFFFFFFFFFFFFFFF" mpz_set_str(@r,"",10) mpz_init_set_ui(@i, 16) For k=1 To Len(h$) mpz_init_set_ui(@j,Val("$"+Mid(h$,k,1))) mpz_mul(@r,@r,@i) mpz_add(@r,@r,@j) Next k *m=AllocateMemory(10000) mpz_get_str(*m, 10, @r);gmpz_get_str(*string, base.i, *op.mpz) Debug PeekS(*m,-1,#PB_Ascii);18446744073709551615 FreeMemory(*m) mpz_clear(@r) mpz_clear(@j) mpz_clear(@i)
sqrt(2)
Structure mpz mp_alloc.l mp_size.l mp_limb.l EndStructure Structure mpf mp_prec.i mp_size.i mp_expt.i mp_limb.i EndStructure ImportC "libgmp-3.lib" mpf_set_default_prec(prec.i) As "___gmpf_set_default_prec" mpf_init(*x.mpf) As "___gmpf_init" mpf_sqrt_ui(*rop.mpf, op.i) As "___gmpf_sqrt_ui" mpf_get_str(*str, *expptr, base.i, n_digits.i, *op.mpf) As "___gmpf_get_str" mpf_clear(*x.mpf) As "___gmpf_clear" EndImport result.mpf;mpf_t result; // floating point variable ;char *output; // holds the output result string exp.l;mp_exp_t exp; // holds the exponent for the result string *output=AllocateMemory(10000) mpf_set_default_prec(1024); // set default precision in bits mpf_init(@result); // allocate and init variable mpf_sqrt_ui(@result, 2); // compute sqrt(2) ; // convert To string, And print: mpf_get_str(*output, @exp, 10, 0, @result); ; printf("%.*s.%s\n", (int)exp, output, output+exp); ;ShowMemoryViewer(*output,1024) r$=PeekS(*output,-1,#PB_Ascii) Debug Mid(r$,1,exp)+"."+Mid(r$,exp+1) ; // clean up FreeMemory(*output); // mpf_get_str() calls malloc() mpf_clear(@result); ; 1.4142135623730950488016887242096980785696718753769480731766797379907 ; 324784621070388503875343276415727350138462309122970249248360558507372 ; 126441214970999358314132226659275055927557999505011527820605714701095 ; 599716059702745345968620147285174186408891986095523292304843087143214 ; 50839762603627995251407989687253396
Библиотека 32бит, ANSI.
Не нашел, как вложить файлы, эта опция отключена?
Отредактировано egons (10.06.2024 06:43:19)
Не нашел, как вложить файлы, эта опция отключена?)
Форум бесплатный и загрузка файлов не поддерживается.
Форум бесплатный и загрузка файлов не поддерживается.
год назад загрузка работала, но ограничен срок хранения.
все ссылки пропали, как положено.
Посмотрел профиль автора, он создал тему в феврале этого года, а его сообщение в этой теме в марте. Так что в личку надо писать. У меня в посте в той теме по твоей ссылке я просил но не упомянул его ник, а значит оно не придёт к нему в "Уведомление" и он не увидит сообщение. Так что надо писать в личку.
Всё, написал ему в личку... Вау, уже ответил...
Не нашел, как вложить файлы
В яндекс выкладывай (нет ограничений по сроку), а сюда ссылку.
Отредактировано AZJIO (10.06.2024 13:48:37)
Всё, написал ему в личку... Вау, уже ответил...
Ох, хорошо бы нашлись все файлы из поста. Особенно интересует:
GMP-Console2.pb (example with threads)
GMP-Console3.pb (Chudnovsky - Pi calculation)
В яндекс выкладывай (нет ограничений по сроку), а сюда ссылку.
Удобнее тут:
https://g0blinish.ucoz.ru/pb-num/gmp64bit.zip
Подсчет числа pi:
XIncludeFile"GMP.pbi" ; Structure mpf_struct ; _mp_prec.l ; _mp_size.l ; _mp_exp.l ; _mp_d.l ; EndStructure ; ; ; ImportC "gmp.lib" ; mpf_init2(var.l,prec.l) As "___gmpf_init2" ; mpf_set_str(var.l,s$,num.l) As "___gmpf_init_set_str" ; mpf_sqrt(a.l,b.l) As "___gmpf_sqrt" ; mpf_ui_div(v_b.l, b1.l, v_c.l) As "___gmpf_ui_div" ; mpf_add(A.l, sa.l, sb.l) As "___gmpf_add" ; mpf_div_ui(A0.l,A1.l, d.l) As "___gmpf_div_ui" ; mpf_mul(B.l,va.l,vb.l) As "___gmpf_mul" ; mpf_sub(T.l,va.l,A.l) As "___gmpf_sub" ; mpf_pow_ui(T0.l,T1.l,p.l) As "___gmpf_pow_ui" ; mpf_mul_ui(Pb.l,ps.l, n.l) As "___gmpf_mul_ui" ; mpf_swap(sa.l,BA.l) As "___gmpf_swap" ; mpf_div(d.l, d1.l, d2.l) As "___gmpf_div" ; mp_sprintf(*buf, fmt$,va.l) As "___gmp_sprintf" ; mpf_clear( va.l ) As "___gmpf_clear" ; EndImport PI_DIGITS=1000;00000 LOG2_10.f=3.321928094887362 PRECISION=PI_DIGITS*LOG2_10 ;Dim As __mpf_struct a,b,t,p,aa,bb,tt,pp,pi a.mpf;_struct b.mpf;_struct t.mpf;_struct p.mpf;_struct aa.mpf;_struct bb.mpf;_struct tt.mpf;_struct pp.mpf;_struct pi.mpf;_struct mpf_init2( @a, PRECISION ) mpf_init2( @b, PRECISION ) mpf_init2( @t, PRECISION ) mpf_init2( @p, PRECISION ) mpf_init2( @aa, PRECISION ) mpf_init2( @bb, PRECISION ) mpf_init2( @tt, PRECISION ) mpf_init2( @pp, PRECISION ) mpf_init2( @pi, PRECISION ) mpf_set_str( @a, "1.0", 10 ) mpf_set_str( @b, "0.5", 10 ) mpf_set_str( @t, "0.25", 10 ) mpf_set_str( @p, "1.0", 10 ) mpf_sqrt( @b, @b ) For i = 1 To Int(Log(PI_DIGITS)*1.44269504088896) ; ''-------------- ; '' aa = (a+b)/2 ; ''-------------- mpf_add( @aa, @a, @b ) mpf_div_ui( @aa, @aa , 2 ) ; ''---------------- ; '' bb = sqrt(a*b) ; ''---------------- mpf_mul( @bb, @a, @b ) mpf_sqrt( @bb, @bb ) ; ''------------------- ; '' tt = t-p*(a-aa)^2 ; ''------------------- mpf_sub( @tt, @a, @aa ) mpf_pow_ui( @tt, @tt, 2 ) ;'mpf_mul( @tt, @tt, @tt ) mpf_mul( @tt, @tt, @p ) mpf_sub( @tt, @t, @tt ) ; ''---------- ; '' pp = 2*p ; ''---------- mpf_mul_ui( @pp, @p, 2 ) ; ''-------------------------------- ; '' a = aa, b = bb, t = tt, p = pp ; ''-------------------------------- mpf_swap( @a, @aa ) mpf_swap( @b, @bb ) mpf_swap( @t, @tt ) mpf_swap( @p, @pp ) Next i ; ''------------------- ; '' pi ~= (a+b)^2/4*t ; ''------------------- mpf_add( @pi, @a, @b ) mpf_pow_ui( @pi, @pi, 2 ) mpf_div_ui( @pi, @pi, 4 ) mpf_div( @pi, @pi, @t ) ;t2 = timer ;Dim As zstring ptr pie=allocate(PI_DIGITS+10) *m=AllocateMemory((PI_DIGITS+10)) f$="%."+Str(PI_DIGITS)+"Ff" gmp_sprintf(*m, @f$, @pi) ; open "pi_100_million.txt" For output As 1 ; print #1,*pie ; close 1 ; print "pi written to the file pi_100_million.txt" ; print t2-t1; " seconds" ; print "gmp version ";*gmp_version Debug PeekS(*m,-1,#PB_Ascii) FreeMemory(*m) mpf_clear( @pi ) mpf_clear( @pp ) mpf_clear( @tt ) mpf_clear( @bb ) mpf_clear( @aa ) mpf_clear( @p ) mpf_clear( @t ) mpf_clear( @b ) mpf_clear( @a ) ;deallocate(pie)
Вы здесь » PureBasic - форум » OpenSource » есть у кого GMP 6.0.0a?