Autore Topic: Crivello di Eratostene  (Letto 2789 volte)

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #15 il: 08 Ottobre 2016, 18:13:27 »
A 3 miliardi ti ha dato out of bound perchè il limite di elementi è 2^32-1.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #16 il: 08 Ottobre 2016, 18:15:48 »
A 3 miliardi ti ha dato out of bound perchè il limite di elementi è 2^32-1.

Il limite di elementi di cosa?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #17 il: 08 Ottobre 2016, 18:59:42 »
Se non erro il codice di Vuott non fa uso di vettori e questo potrebbe spiegare il fatto che è veloce il doppio.

...c'è un Puntatore ad un Intero:
Codice: [Seleziona]
int *list

Non vi sono Moltiplicazioni.


« Ultima modifica: 08 Ottobre 2016, 19:00:25 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #18 il: 08 Ottobre 2016, 21:01:06 »
Nel mio codice quello che rallenta tanto è il secondo loop, la prima parte individua i numeri non primi mettendoli a True in 7/8 secondi, tutto il resto se lo posta via questo:
Codice: [Seleziona]
For i = 2 To n
    If v[i] = False Then
      Print i
    Endif
  Next
Purtroppo io non conosco il C, tu non potresti tradurre in gambese il codice scritto in C per vedere se funziona meglio  :D

 :ciao: :ciao:

PS Chissà Top Fuel cosa voleva dire...
« Ultima modifica: 08 Ottobre 2016, 21:04:46 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #19 il: 09 Ottobre 2016, 00:57:58 »
...potresti tradurre in gambese il codice scritto in C ....

...gambese ?   ???
http://www.jokisaari.net/gambia/pics/gambia-map.gif

Ad ogni modo ecco la traduzione:
Codice: [Seleziona]
Public Sub Main()

  Dim limite, dime, lim, i, j, z As Integer
  Dim lista As Integer[]
 
    limite = 1000000
   
    dime = limite / 2 + 1
   
    lista = New Integer[dime]
   
    Print 2
   
    lim = Sqr(CFloat(limite))

    j = 1
    i = 3
     
    While i <= lim
      If lista[j] = 0 Then
        z = j + i
        While z < dime
          lista[z] = -1
          z += i
        Wend
        Print i
      Endif
      i += 2
      Inc j
    Wend

    While i < limite - 1
      If Not lista[j] Then Print i
      i += 2
      Inc j
    Wend

End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #20 il: 09 Ottobre 2016, 14:00:27 »
...gambese ?   ???
http://www.jokisaari.net/gambia/pics/gambia-map.gif
:P :P :P

Ho notato che anche la console rallenta, infatti nel codice C si ottiene il result a seguire, pertanto se noi inseriamo dietro a Print nei codici in gambase  :P la virgola (il doppio punto e virgola è più lento) riduciamo il gap col C, questi i risultati su 100 milioni nel mio computer:
Codice: [Seleziona]
Crivello in C vuott   22371,8590736389 msec / 22567,2857761383 msec
Setaccio Vuott        24636,3999843597 msec / 24362,3239994049 msec
Setaccio Top Fuel     26364,4378185272 msec / 25966,2098884583 msec
Setaccio Gianluigi    30971,825838089  msec / 29990,3969764709 msec
Il nuovo codice su 2 miliardi mi da memoria terminata.
 :ciao: :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #21 il: 09 Ottobre 2016, 15:02:11 »
Nei programmi Gambas puro hai usato Fast ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #22 il: 09 Ottobre 2016, 15:30:33 »
Nei programmi Gambas puro hai usato Fast ?

Si in tutti escluso il tuo con la libreria C, senza Fast il tuo codice impiega 30520,5111503601 msec invece di 24636,3999843597 msec
« Ultima modifica: 09 Ottobre 2016, 15:54:28 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #23 il: 09 Ottobre 2016, 19:37:48 »
A 3 miliardi ti ha dato out of bound perchè il limite di elementi è 2^32-1.

Il limite di elementi di cosa?

Il limite di elementi che può avere un array. Dall'errore si deduce che Gambas usa un intero di 4 byte per conteggiare il numero di elementi.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #24 il: 10 Ottobre 2016, 10:42:51 »
A 3 miliardi ti ha dato out of bound perchè il limite di elementi è 2^32-1.

Il limite di elementi di cosa?

Il limite di elementi che può avere un array. Dall'errore si deduce che Gambas usa un intero di 4 byte per conteggiare il numero di elementi.

Si è vero, hai ragione.
Grazie  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #26 il: 06 Gennaio 2017, 16:16:07 »
Interessante, ma come fai in Gambas a leggere la cache della CPU? E sopratutto come fai a sapere in quale cache sono scritti i numeri? L1, L2, L3, core 0, core 1...
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Crivello di Eratostene
« Risposta #27 il: 06 Gennaio 2017, 17:00:03 »
...come fai in Gambas a leggere la cache della CPU?
A mio modesto parere il problema non è se con Gambas sia possibile leggere la cache della CPU, ma più in generale "come", e soprattutto "con quali risorse di quale libreria" sia possibile.



eloaders aveva mostrato una libreria esterna (ce n'è comunque anche qualche altra) per ottenere semplicemente alcune informazioni generali sulla CPU:
http://www.gambas-it.org/smf/index.php?topic=5197.0
Non so se questa o altre consentano di leggere dentro la cache.
« Ultima modifica: 06 Gennaio 2017, 17:06:25 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »