Il problema di usare i doppi come chiavi nelle mappe/insiemi è la precisione in virgola mobile.Modi per usare un doppio come chiave in un set/mappa std
Alcune persone hanno suggerito di aggiungere un epsilon nella funzione di confronto, ma ciò significa che le chiavi non soddisfano più il criterio rigoroso debole. Ciò significa che otterrai un set/mappa diverso a seconda dell'ordine di inserimento dei tuoi elementi.
Nel caso in cui si desidera aggregare/combinare/unire dati basati su valori doppi e sono disposti a consentire un certo livello di arrotondamento/epsilon (chiaramente, sarà necessario), la seguente soluzione è buona idea?
Convertire tutti i doppi (dove intendevamo come chiavi) in numeri interi moltiplicandoli per il fattore di precisione (ad esempio 1e8) e arrotondando al numero intero più vicino (int)i+0.5
(se i> 0), quindi creare un set/mappa che chiavi fuori da questi numeri interi. Quando si estraggono i valori finali delle chiavi, dividere i pollici per il fattore di precisione per ottenere il doppio valore indietro (anche se arrotondato).
Forse è sufficiente utilizzare un tipo di dati di libreria arbitraria di precisione (ad esempio GMP) come tipo di chiave? – PaulMcKenzie
Perché consideri la precisione a virgola mobile un problema quando utilizzi i doppi come una chiave in una struttura ad albero o in una tabella hash? Funziona fin tanto che non si usano i NaN come chiavi, e funziona anche esattamente come ci si aspetterebbe. – tmyklebu
Mi chiedo quale tipo di problema possa richiedere valori in virgola mobile in insiemi o mappe. Gli insiemi e le mappe sono adatti per i dati discreti, i valori a virgola mobile sono buoni per i dati continui. –