In alcune situazioni, generalmente si utilizza un valore intero abbastanza grande per rappresentare l'infinito. Di solito uso il numero intero positivo/negativo rappresentabile più grande. Questo di solito produce più codice, dal momento che è necessario verificare se uno degli operandi è infinito prima di praticamente tutte le operazioni aritmetiche per evitare overflow. A volte sarebbe desiderabile avere un aritmetico intero saturo. Per questo motivo, alcune persone usano valori più piccoli per l'infinito, che possono essere aggiunti o moltiplicati più volte senza eccessi. Quello che mi incuriosisce è il fatto che è estremamente comune vedere (specialmente nelle competizioni di programmazione):Perché infinity = 0x3f3f3f3f?
const int INF = 0x3f3f3f3f;
Perché quel numero speciale? La sua rappresentazione binaria è:
00111111001111110011111100111111
Non vedo alcuna proprietà particolarmente interessante qui. Vedo che è facile da digitare, ma se questo fosse il motivo, quasi qualsiasi cosa avrebbe fatto (0x3e3e3e3e, 0x2f2f2f2f, ecc.). Può essere aggiunto una volta senza troppo pieno, che permette di:
a = min(INF, b + c);
Ma tutte le altre costanti avrebbero fatto, allora. Googling mi mostra solo un sacco di frammenti di codice che usano quella costante, ma senza spiegazioni o commenti.
Qualcuno può individuarlo?
Avete qualche esempio concreto di questo viene utilizzato in un contesto generico (e non all'interno di un algoritmo specializzato dove potrebbe avere un senso)? – Mat
L'ho taggato come C poiché una rapida ricerca su Google trova solo il codice C che usa quella costante. Sentiti libero di riadattarti. – JJJ
@Mat: ad esempio, prendi qualsiasi algoritmo che calcoli i percorsi più brevi in un grafico. La distanza dai vertici non raggiungibili dal vertice iniziale è teoricamente infinita. Hai bisogno di un modo per rappresentarlo (ma usare il floating point sarebbe eccessivo). Potrebbero esserci esempi di algoritmi molto diversi che lo utilizzano. Ho dato un esempio specifico, ma la tecnica è utile ogni volta che si scrive "infinito" in pseudocodice. – Gabriel