Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Zeldic
    Registrato dal
    Jan 2010
    Messaggi
    80

    [C] Come rappresentare dati > di 4 mld?

    Salve, ragazzi! Non riesco a rappresentare dei dati numerici superiori al valore di un tipo di dato intero long unsigned int, che arriva per l'appunto ad un massimo valore di 4294967295. Mi serve per il mio programmino sull' n!. Per un n > 13 il programma visualizza in Output valori errati e pur sempre < di 4 mld. Quindi di che tipo di dato ho bisogno? Esiste in C?
    Help me.

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    qui cmq credo che possa usare anche un double
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Il tuo fattoriale deve essere preciso all'intero o ti va bene anche perdere qualche cifra significativa (ti serve cioé più una stima di massima che il valore preciso)?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di Zeldic
    Registrato dal
    Jan 2010
    Messaggi
    80


    Originariamente inviato da MItaly

    Il tuo fattoriale deve essere preciso all'intero o ti va bene anche perdere qualche cifra significativa (ti serve cioé più una stima di massima che il valore preciso)?

    Ciao! Il mio programma deve restituire il valore preciso dell'n! di un n intero.

  5. #5
    Con gli interi a 64 bit (unsigned long long su gcc, unsigned int64 su VC++, uint64_t su tutti i compilatori che implementano correttamente stdint.h) dovresti guadagnare qualcosa, ma oltre il 20 non ci arrivi. Se ti servono valori "perfetti" l'unica è usare librerie per lavorare in precisione arbitraria (ad esempio la GMP); in alternativa, puoi lavorare con i double, ma ovviamente perderai in precisione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di Zeldic
    Registrato dal
    Jan 2010
    Messaggi
    80


    Originariamente inviato da linoma

    qui cmq credo che possa usare anche un double

    Grazie dei vostri preziosi suggerimenti. Ho dichiarato di tipo double sia la mia funzione 'fattoriale()', sia il dato in Output. Credo sia il tipo esatto per rappresentare il risultato nella maniera corretta, mi sembra più che soddisfacente. Il mio problema, inoltre, era che non conoscevo il placeholder, lo specificatore del tipo dell'argomento, riferito in particolar modo alla printf(). Il mio utilissimo libro di C di Kernighan & Ritchie ed il seguente link printf (scoperto grazie a GliderKite) mi hanno indicato la soluzione in :

    codice:
    printf("\nL'n! di %i e' il seguente ---> %.0f.\n\n\n", numero, risultato);
    che mi consente di visualizzare correttamente l' n! e senza gli zeri dopo la virgola, che tanto non mi servono.



    Con gli interi a 64 bit (unsigned long long su gcc, unsigned int64 su VC++, uint64_t su tutti i compilatori che implementano correttamente stdint.h) dovresti guadagnare qualcosa, ma oltre il 20 non ci arrivi. Se ti servono valori "perfetti" l'unica è usare librerie per lavorare in precisione arbitraria (ad esempio la GMP); in alternativa, puoi lavorare con i double, ma ovviamente perderai in precisione.

    Purtroppo di questi tipi (che farebbero benissimo al caso mio) non ho trovato il corretto placeholder. Li ho provati tutti, %e, %E, %f, %g, %Ld, ..., ma il programma mi restituiva NULL, 0, o si interrompeva.

    Inoltre non sono riuscita ad eseguire il download della libreria GMP, perché non so aprire il file con estensione .tar.lz..

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Su quale sistema stai lavorando e con quale compilatore?
    every day above ground is a good one

  8. #8
    Originariamente inviato da Zeldic
    Purtroppo di questi tipi (che farebbero benissimo al caso mio) non ho trovato il corretto placeholder.
    Per long long si usa %lld, per uint64_t e in generale per gli interi di stdint.h si usano le macro di inttypes.h, per __int64 dovrebbe andare ancora bene %%ld.
    Inoltre non sono riuscita ad eseguire il download della libreria GMP, perché non so aprire il file con estensione .tar.lz..
    Su che sistema operativo sei?
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di Zeldic
    Registrato dal
    Jan 2010
    Messaggi
    80


    Originariamente inviato da YuYevon

    Su quale sistema stai lavorando e con quale compilatore?

    Windows 7 e lavoro col Dev-C++ 4.9.9.2.

  10. #10
    Originariamente inviato da Zeldic
    Windows 7
    Allora puoi usare IZArc o 7-Zip per decomprimere l'archivio in questione.
    e lavoro col Dev-C++ 4.9.9.2.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.