PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » OpenSource » есть у кого GMP 6.0.0a?


есть у кого GMP 6.0.0a?

Сообщений 1 страница 7 из 7

1

https://www.purebasic.fr/english/viewtopic.php?t=61315

все ссылки пропали, как положено.

0

2

Разобрался немношк и вытащил библиотеки

Результат можно получить другим способом, это для изучения:

Код:
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)

0

3

egons написал(а):

Не нашел, как вложить файлы, эта опция отключена?)

Форум бесплатный и загрузка файлов не поддерживается.

0

4

Пётр написал(а):

Форум бесплатный и загрузка файлов не поддерживается.

год назад загрузка работала, но ограничен срок хранения.

0

5

egons написал(а):

все ссылки пропали, как положено.

Посмотрел профиль автора, он создал тему в феврале этого года, а его сообщение в этой теме в марте. Так что в личку надо писать. У меня в посте в той теме по твоей ссылке я просил но не упомянул его ник, а значит оно не придёт к нему в "Уведомление" и он не увидит сообщение. Так что надо писать в личку.
Всё, написал ему в личку... Вау, уже ответил...

egons написал(а):

Не нашел, как вложить файлы

В яндекс выкладывай (нет ограничений по сроку), а сюда ссылку.

Отредактировано AZJIO (10.06.2024 13:48:37)

0

6

AZJIO написал(а):

Всё, написал ему в личку... Вау, уже ответил...

Ох, хорошо бы нашлись все файлы из поста. Особенно интересует:

GMP-Console2.pb (example with threads)
GMP-Console3.pb (Chudnovsky - Pi calculation)

AZJIO написал(а):

В яндекс выкладывай (нет ограничений по сроку), а сюда ссылку.

Удобнее тут:
https://g0blinish.ucoz.ru/pb-num/gmp64bit.zip

0

7

Подсчет числа 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)

0


Вы здесь » PureBasic - форум » OpenSource » есть у кого GMP 6.0.0a?