Strana cosa che avviene correggendo un sorgente C da Pc a Pc

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    A questo punto tutto può essere, compreso qualche problema di overflow o di settaggi del compilatore... Io l'ho testato su una Debian 32 bit e una Windows 64 bit e ottengo gli stessi tuoi numeri.
    Se le altre istruzioni non contengono generazione di numeri casuali o cose strane allora propenderei per qualche impostazione di compilazione, anche se è solo un'ipotesi.
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    Sembra che mandandolo in overflow va in segmentation fault

    Prova con :

    long idum = -734528756391;
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    SVNiko ha scritto:


    Sembra che mandandolo in overflow va in segmentation fault

    Prova con :

    long idum = -734528756391;
    Ho provato quel valore sia su Debian che su Windows: ho un warning sull'overflow ma non va in seg fault. Esegue correttamente e, in entrambi i casi, restituisce i valori
    
    [0]  2.32492
    [1]  13.2653
    [2]  0.0763168
    [3]  4.4837
    [4]  9.83771
    [5]  2.31318
    [6]  15.0434
    [7]  3.31806
    [8]  16.2739
    [9]  18.3137
    
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    [0] 20
    Segmentation fault (core dumped)
    Questo quello che ottengo io.

    A questo punto il sospetto che il problema derivi dall'overflow è più forte.
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    long idum = -73452875639;

    [0] 20
    [1] 2.59995
    [2] 7.335
    [3] 11.8556
    [4] 8.07146
    [5] 7.20163
    [6] 12.8895
    [7] 8.10416
    [8] 17.7784
    [9] 0.546716
    Questa la cifra minima che posso utilizzare. Sto usando code::blocks 13.12
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    Ottengo i vostri stessi risultati (i primi risultati postati da SVnniko) con questo semplice programma:
    #include "ran2.h"
    
    #define N 10
    
    int j;
    double po[N];
    long idum;
    
    int main(){
    idum     = -7345287;
    for(j=0;j<N;j++){
    po[j]=ran2(&idum)*20;
    printf("%lf\n", po[j]);
    }
    }
    Io non sono esperto ma quale compilatore si usa potrebbe incidere? Io usa la IDE Code:blocks che ha il compilatore integrato. E lo uso si Windows. Cosa sarebbe l'overflow?
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    Prova per favore con questo idum.

    long idum = -734528756391;


    Certo anche il compilatore può essere il problema.

    L'overflow si verifica quando la macchina non riesce a rappresentare il numero che tu hai inserito.
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    Ecco i risultati con quell'idum, sono allegati, visto che dalla console non mi fa copiare i dati

    Noto che anche a me alla fine da warning: overflow in implicit constant conversion
    Allegati:
    idum= -734528756391
    idum= -734528756391
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    C'è un problema pure alla tua esecuzione, perchè ritorna 10 e indirizzo 0xA. Se tutto va bene deve ritornare 0 e indirizzo 0x0

    Ho fatto un po' di debug, a me va in overflow per un indice eccessivamente grande del vettore iv.

    Uhmmmm!!!
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    Mah...noto che questa cosa avviene anche con l'idum originale..comunque sia questo potrebbe essere all'origine del problema? Cioè i risultati diversi? Perchè per ora mi pare di aver capito che quel generatore dà risultati a tutti uguali..pure col mio "collega" avevamo provato a fare un test simile..e venivano gli stessi numeri.
  • Re: Strana cosa che avviene correggendo un sorgente C da Pc a Pc

    Non so forse inizio ad essere di un'altra generazione, forse perché io mi preoccuperei perché una funzione pseudo casuale ritorni sempre gli stessi numeri sulla mia macchina e in base alla funzione stessa potrebbe portate risultati ben diversi su altri computer.
    Bisognerebbe quindi estrarre solo il frammento di codice che non fa quello che si vuole e spiegare il perché, la caccia alla streghe è finita da secoli.

    [edit]
    Ha poi già detto che il problema non è nella ran2 che molto probabilmente è creata per generare sempre gli stessi numeri.
    sarebbe utile sapere anche se si usa sempre lo stesso compilatore.

    per finire senza codice e senza la sfera di cristallo è impossible aiutarti.
    DEVI isolare il problema!
Devi accedere o registrarti per scrivere nel forum
25 risposte