Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] - Numeri molto grandi

    Ciao, sto cercando di trasformare questo piccolo script Perl in C:

    codice:
    #!/usr/bin/perl
    $N=1; $n=1;
    while($N){
            $n*=$N;
            print $N."\t".$n."\n";
            sleep(1);
            $N++;
    }
    Ecco il codice C

    codice:
    #include<stdio.h>
    int main()
    {
            float n = 1;
            unsigned long N = 1;
            while(N){
                    n*=N;
                    printf("%d\t",N);
                    printf("%f\n",n);
                    sleep(1);
                    N++;
            }
    }
    Ora, in entrambi i casi il listato calcola il fattoriale (n!) di N, solo che muovendo i primi passi in C ho qualche difficolta' con l'assegnazione delle variabili. Non riesco infatti a capire come dichiarare n in modo che la rapprensentazione del numero sia esponenziale. Con float, infatti, la rappresentazione si ferma a N=34, mentre in Perl $N=170;

    Grazie.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  2. #2
    UP!

    Ciao, forse mi sono spiegato male? Avrei bignoso di rappresentare `n` come esponenziale (n=x*E^k). E' possibile? Grazie.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Il tipo double dovrebbe fare al caso tuo.

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    prova ad usare %e al posto di %f

    edit:
    ho provato con:

    printf("%d\t%-2.2e\n",N, n);

    Come risultato ottengo:

    codice:
    ...
    12      4.79e+008
    13      6.23e+009
    14      8.72e+010
    15      1.31e+012
    16      2.09e+013
    17      3.56e+014
    18      6.40e+015
    19      1.22e+017
    20      2.43e+018
    21      5.11e+019
    22      1.12e+021
    ...
    Ecco, usando double come suggerito e %e arrivo fino a 170:

    codice:
    #include<stdio.h>
    int main()
    {
            double n = 1;
            unsigned long N = 1;
            while(N <= 175){
                    n*=N;
                    printf("%u\t%2.2e\n",N, n);
                 //sleep(1);   
                    N++;
            }
    }
    codice:
    ...
    167     1.50e+300
    168     2.53e+302
    169     4.27e+304
    170     7.26e+306
    171     1.#Je+000
    172     1.#Je+000
    173     1.#Je+000
    174     1.#Je+000
    175     1.#Je+000
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Grazie a tutti e due, e' perfetto. Mi spiegate il significato di

    codice:
    printf("%u\t%2.2e\n",N, n);
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    praticamente fondo i due printf in un printf solo, assomiglia di più al programma in Perl.
    2.2 sono parametri che si passano a %e, ecco una reference completa: http://www.science.unitn.it/~fiorell...guidac067.html

    Tra il simbolo % ed il carattere di formato, e' possibile mettere:

    - (segno meno) - giustificazione a sinistra;
    numero intero - ampiezza del campo
    m.d - m=ampiezza del campo, d=precisione del numero
    di cifre dopo il punto decimale, o numero di
    caratteri da una stringa

    Cosi', ad esempio, potremo avere:

    printf("%-2.3f\n",17.23478);

    e l'output a video sara':

    17.235
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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.