PDA

View Full Version : [C] Codice ritorna -1.#IND00


cipi
16-11-2004, 18:17
Come da titolo... Il mio codice, dopo n calcoli, mi ritorna (talvolta) il valore -1.#IND00. Che c@çç° è??? O meglio, mi pare di aver capito che indichi un infinito negativo, vero? Siccome è troppo lungo debuggare il prog istruzione per istruzione, come faccio a intercettare l'evento? Se metto un Breakpoint in
if(value==-1.#IND00)
qui il codice si ferma sempre... Idee? Cionci, ilsensine... voi che siete dei guru cosa mi consigliate?
;)

cipi
16-11-2004, 18:19
dimenticavo... uso gcc di MinGW!

cipi
16-11-2004, 18:38
Scusate... ho combinato!
Il "negative Inf" era dovuto ad un log. Mettendo un controllo è filato tutto liscio.
Grazie cmq.
cipi ;)

cionci
16-11-2004, 18:59
Dovrebbe essere proprio un infinito negativo...
Riguardo all'intercettazione... E' sicuramente problematica...
Dai un'occhiata qui: http://ilab.usc.edu/cgi-bin/yabb/YaBB.pl?board=bugs;action=display;num=1049495668

cipi
17-11-2004, 16:41
Mi sono accorto che una funzione f1 (che dovrebbe generare dei numeri random) mi da in uscita dei numeri -Inf. Tale funzione è testatissima e in altri contesti non ha mai dato problemi... Questo perché si incasina la memoria (probabilmente!) dopo una chiamata ad una funzione f2...
Allora ho preso e svuotato la funzione f2 (come soluzione estrema dopo svariati tentativi) e ancora f1 mi da problemi! Commento il richiamo a f2 ed f1 funziona benissimo. Come mai?
Spero di essere stato chiaro... :(

cipi
17-11-2004, 17:15
ok... ulteriore complicazione! Cambiando compilatore funziona! Cioè:
MinGw -> gcc: Non Funziona
cygwin -> gcc: Funziona


:confused:

Ziosilvio
17-11-2004, 17:35
Originariamente inviato da cipi
Mi sono accorto che una funzione f1 (che dovrebbe generare dei numeri random) mi da in uscita dei numeri -Inf.
Sei sicuro che f1 non sia una cosa del tipo log(random()) con random() che restituisce valori casuali tra 0 incluso e 1 escluso?
ho preso e svuotato la funzione f2
Cosa vuol dire "svuotare una funzione"?
Vuoi dire che hai liberato lo spazio in memoria occupato dalle istanze della funzione?
O che hai commentato il suo codice?
O qualcos'altro?
e ancora f1 mi da problemi! Commento il richiamo a f2 ed f1 funziona benissimo. Come mai?
Non possiamo saperlo finche' non posti il codice, o almeno la documentazione.
(Tanto, a questo punto, e' evidente che f1 e' "traumatica" e forse lo e' anche f2.)

cipi
17-11-2004, 17:41
Ciao Ziosilvio,
"traumatica" rende l'idea... Procedo con ordine....
- Svuotata=commenta! Dentro non c'è nulla!
- La funzione random è quella di Numerical Recepies :ave: Quindi è ok!
- Il codice è qualche k. Te lo mando via mail? ;)
cipi

Ziosilvio
18-11-2004, 14:55
Originariamente inviato da cipi
- La funzione random è quella di Numerical Recepies :ave: Quindi è ok!
OK, la cerco li' quando ho tempo.
Solo una cosa non ho capito: io ti ho detto di controllare che f1 non sia il log di una funzione random che puo' assumere il valore zero.
La "random" delle Numerical Recipes, e' la tua f1 o la mia random?
- Il codice è qualche k. Te lo mando via mail? ;)
Meglio di no, grazie! ;)
Adesso non ho molto tempo, semmai piu' tardi.

cipi
18-11-2004, 16:36
Originariamente inviato da Ziosilvio
OK, la cerco li' quando ho tempo.
Solo una cosa non ho capito: io ti ho detto di controllare che f1 non sia il log di una funzione random che puo' assumere il valore zero.
La "random" delle Numerical Recipes, e' la tua f1 o la mia random?

E' la tua random... se ho capito la domanda :confused: Cioè, i numeri random sono ottenuti da NR e mi servono per creare il DOE iniziale di una ottimizzazione dove il log() fa parte della determinazione della funzione obiettivo! Ho messo un controllo in modo tale da escludere ogni log(numero negativo) e DivPerZero! Il problema mio era diventato il fatto che gcc di mingw non compilava mentre quello di cygwin, si!
Boh!!!!
Cmq grazie.
PS
La firma è tratta da "Fanteria dello Spazio"? Gran libro... ;)

Ziosilvio
18-11-2004, 21:46
Originariamente inviato da cipi
E' la tua random... se ho capito la domanda :confused: Cioè, i numeri random sono ottenuti da NR e mi servono per creare il DOE iniziale di una ottimizzazione dove il log() fa parte della determinazione della funzione obiettivo! Ho messo un controllo in modo tale da escludere ogni log(numero negativo) e DivPerZero!
E qui, un modo veloce per farlo è questo: prendi una random() che restituisce interi in virgola mobile tra 0 incluso e 1 escluso, e poi chiami log(1.0-random()).
In questo modo, il controllo ce l'hai gratis ;)
Il problema mio era diventato il fatto che gcc di mingw non compilava mentre quello di cygwin, si!
Boh!!!!
Quoto. Non ho idea di perché succeda, tanto più che alla base di entrambi dovrebbe esserci il gcc...
Cmq grazie.
Prego
PS
La firma è tratta da "Fanteria dello Spazio"? Gran libro... ;)
Sì, è tratta da lì.