È possibile utilizzare un valore float come indice di una matrice? Cosa succederebbe se un'espressione utilizzata come indice avesse come risultato un valore float?Valori di virgola mobile come indice in una matrice in C++
risposta
Il valore float sarà fusa a int (che può dare avviso o errore a seconda del livello di avviso del compilatore)
s1 = q[12.2]; // same as q[12]
s2 = q[12.999999]; // same as q[12]
s3 = q[12.1/6.2]; // same as q[1]
Sì. Ma è inutile. Il valore float verrà troncato a un numero intero.
(È possibile utilizzare std::map<float, T>
, tuttavia, ma il più delle volte vi perderete i valori previsti a causa di imprecisione.)
+1 per 'std :: map' –
Per quanto riguarda l'imprecisione, penso che ci dovrebbe essere un modo per fornire la propria funzione di confronto in cui è possibile includere un 'epsilon' ... una tolleranza di sorta. –
@Agnel Kurian std :: map of course ti consente esattamente questo –
sarà fusa a int.
Un array C++ è una sequenza contigua di posizioni di memoria. a[x]
significa "la x posizione di memoria dopo quella puntata da a
".
Cosa significherebbe accedere al 12.4 ° oggetto in una sequenza?
Nota per i pedanti: sì, so che gli offset dell'array non sono una semplice aggiunta di interi ai puntatori: questa frase presuppone che una "posizione di memoria" sia la dimensione di un membro dell'array, quindi per un int a [], a [5] significa la quinta parola, non il quinto byte. – Crashworks
Questo è un errore. In [expr.sub]
:
Un'espressione postfisso seguita da un'espressione tra parentesi quadre è un'espressione post fi x. Una delle espressioni deve avere il tipo "puntatore a T" e l'altra deve avere l'enumerazione senza ambito o il tipo integrale.
Non sono a conoscenza di una clausola standard che specifica che la conversione dovrebbe accadere qui (è vero, io non sarei sorpreso se una simile clausola esisteva), anche se il test con ideone.com ha prodotto un errore di compilazione.
Tuttavia, se si esegue l'iscrizione di una classe anziché di un puntatore — ad es. std::vector
o std::array
— quindi il sovraccarico di operator[]
avrà la solita semantica di una chiamata di funzione e gli argomenti in virgola mobile verranno convertiti nel corrispondente size_type
.
- 1. C - arrotondamento in virgola mobile
- 2. Confrontando i valori in virgola mobile
- 3. IBIndivise e valori in virgola mobile
- 4. Numeri a virgola mobile a virgola fissa in C/C++
- 5. Tipo di indice di matrice in C#?
- 6. ordina una matrice di float in C++
- 7. Libreria per virgola mobile in virgola mobile Math in .NET
- 8. Converti virgola mobile in virgola mobile (SQL Server)
- 9. estesa di precisione in virgola mobile libreria C/C++
- 10. Formattazione a virgola mobile in printf()
- 11. Come visualizzare più zeri iniziali per i valori in virgola mobile in C++?
- 12. Conversione di stringhe in virgola mobile in C#
- 13. Le operazioni in virgola mobile sono associate in C?
- 14. Conversione da virgola mobile IBM a standard in virgola mobile IEEE e Vice Versa- In C#?
- 15. come convertire una matrice di valori in una matrice binaria
- 16. Coseno in virgola mobile
- 17. Diagnosi di overflow in virgola mobile in programmi C++
- 18. Problema con funzionamento in virgola mobile di precisione in C
- 19. Comportamento in virgola mobile errato
- 20. elenco di ordinamento di numeri in virgola mobile nei gruppi
- 21. Modo per ottenere valori speciali a virgola mobile in CUDA?
- 22. Confronto in virgola mobile 0
- 23. C++ Come evitare virgola mobile errore aritmetico
- 24. formato stringa per valori in virgola mobile printf
- 25. WebGL Lettura di pixel da una virgola mobile in virgola mobile
- 26. "Mezzo round up" su valori in virgola mobile
- 27. Forzatura per eseguire calcoli in virgola mobile
- 28. C++ perdita di precisione in virgola mobile: 3015/0.00025298219406977296
- 29. Codifica in virgola mobile Raw
- 30. abbinabili virgola mobile di Excel in Java
Suona come i compiti? –
Una pessima idea a causa di errori di arrotondamento. Tuttavia, a volte ciò è utile, ma il valore deve essere prima convertito in numero intero e il controllo dei limiti (o limitazione) deve essere eseguito prima dell'accesso. Questa operazione può essere utile per es. per approssimare i valori per una funzione a virgola mobile utilizzando una tabella di ricerca. – Tronic