Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755

    calcolo cifre decimali "pi greco"

    Salve a tutti ,
    il mio scopo è quello di creare un programma in java che calcoli "tot" cifre decimali del numero irrazionale pi greco , con "tot" numero acquisito in input.
    Per la determinazione delle cifre decimali del pi greco userò l'algoritmo di Chudnovsky.
    Nell'effettuare calcoli di questo tipo con un numero enorme di cifre , l'intento sarebbe magari di superare il record di 5000 miliardi di cifre decimali http://it.wikipedia.org/wiki/Pi_greco#cite_note-18 , sorgono una marea di problemi a cui ancora non so minimamente come far fronte.
    Innanzitutto tutti i tipi di dato primitivi in java non sono sufficienti a rappresentare un numero a 5000 miliardi di cifre , anche i double sarebbero una nicchia a confronto...così ho pensato di utilizzare numeri in formato stringa , in un certo senso così facendo posso avere a che fare con numeri la cui dimensione è limitata dalla quantità di memoria fisica (sarebbe meglio dire di heap size che la JVM concede all'applicazione ) installata (RAM)...ma pur così facendo , considerando che le stringhe sono considerabili come concatenazioni di caratteri , che in java occupano 16 bit (2byte) ciascuno , per ottenere e "immagazzinare" , anche temporaneamente , numeri a 5000 miliardi di cifre servirebbe una memoria di 5000 miliardi * 2 byte --> 10000 miliardi di byte --> all'incirca 9 TB di memoria , una quantità immensa rispetto alle memoria che si trovano in commercio o di cui si dispone normalmente...
    Dunque mi sto scervellando per trovare un qualche procedimento per raggirare , in primis , questo problema sopra descritto , ma per ora sono proprio in alto mare...
    Girando per il web sono venuto a conoscenza , e ho potuto anche farne un primo utilizzo , di alcuni programmi (penso scritti in C o qualcosa del genere ) tipo y-cruncher o TachusPI (implementato dal precedente detentore del record di cifre decimali del pi greco , con 2700 miliardi di cifre , qui scaricabile http://bellard.org/pi/pi2700e9/tpi.html) , ma non disponendo dei codici sorgenti di essi non so come operano per fare calcoli con numeri di così estremamente grandi cifre...in particolare il secondo che sembra non avere bisogno di ingenti quantità di RAM a disposizione (basti pensare che Fabrice Bellard ha effettuato questo calcolo utilizzando un computer domestico CPU Intel Core i7 a 2,97 GHz, 6 GB di RAM e 7,5 TB di memoria fissa) mentre y-cruncher sembra aver bisogno di estreme quantità di RAM...

    Dunque avete qualche idea su come possa essere implementato un programma simile?Ovviamente non pretendo che mi forniate il codice sorgente ma , se qualcuno ha qualche brillante idea , di buttar giù i concetti in modo da aiutarmi in questo intento...

    Ps. forse l'argomento può essere un po' "off topic" rispetto alla sezione , ma in questo caso non saprei in quale altra sezione postare la domanda...

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ciao, prima di reinventare la ruota, sappi che Java già prevede dei formati numerici grandi "a piacere", tradotti nelle classi BigInteger e BigDecimal.

    Poi quando si va alla ricerca di grandi primi, della mila-miliardesia cifra decimale di numeri trascendenti etc etc, o si usano mainframe da paura oppure si distribuisce. Tutto sulla stessa macchina (formato casereccio) proprio no.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Originariamente inviato da Andrea1979
    ciao, prima di reinventare la ruota, sappi che Java già prevede dei formati numerici grandi "a piacere", tradotti nelle classi BigInteger e BigDecimal.

    Poi quando si va alla ricerca di grandi primi, della mila-miliardesia cifra decimale di numeri trascendenti etc etc, o si usano mainframe da paura oppure si distribuisce. Tutto sulla stessa macchina (formato casereccio) proprio no.
    Le classi BigInteger e BigDecimal le conoscevo già , ma ci sono dei problemi nell'usarle per il mio scopo:
    - a meno che con java 7 abbiano cambiato qualcosa BigDecimal prevede un massimo di cifre decimali che si aggira all'incirca attorno ai 4 miliardi (insufficienti a ciò che serve a me)
    -usando esse il tutto avverrebbe in RAM , e supponendo di voler tenere (sommare , moltiplicare , dividere ecc) in RAM un numero di 5000 miliardi di cifre e considerando il numero in formato stringa (di tipo ASCII) , quindi come concatenazione di caratteri , ciascuno di dimensione 2 byte si dovrebbe possedere una RAM di circa 9 TB...IMPENSABILE!!!

    Riguardo la tua seconda affermazione , in un certo senso potrei smentirti : come ho sopra citato Fabrice Bellard è riuscito nel calcolo di 2700 miliardi di cifre usando un comune (abbastanza) pc domestico (intel core i7 2.9 GHz e 6 GB RAM , salvando il numero su 5 HD di 1,5 TB ciascuno , penso usando la tecnica RAID o qualcosa del genere) quindi non è poi impossibile effettuare tali operazioni anche con un computer "ragionevolmente econocomico" e comune.

    Infine , devo dire che ho delle idee per fare ciò per cui ho aperto questa discussione , sono in "lavori in corso" , fatto sta che non so se pur trovando il modo vorrò lasciar in fase di calcolo per un annetto il mio pc

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    No, se tu guardi i tempi di esecuzione del programmino che hai linkato tu sono 709 secondi per 10^9 cifre. Per 2700 volte 10^9, garantito come la morte che non sono 709*2700. Fallo girare ed il giorno che tirerò la pensione quello sarà ancora là che gira
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.