E 'possibile assegnare un o float
in C/C++? Come in JavaScript, fai: a = NaN
. Quindi più tardi puoi controllare se la variabile è un numero o no.Costante NaN C/C++ (valore letterale)?
risposta
In C, NAN
è dichiarata in <math.h>
.
In C++, std::numeric_limits<double>::quiet_NaN()
è dichiarato in <limits>
.
Ma per verificare se un valore è NaN, non è possibile confrontarlo con un altro valore NaN. Utilizzare invece isnan()
da <math.h>
in C o std::isnan()
da <cmath>
in C++.
questo può essere fatto utilizzando i numeric_limits in C++:
http://www.cplusplus.com/reference/limits/numeric_limits/
Questi sono i metodi che probabilmente vuole guardare:
infinity() T Representation of positive infinity, if available.
quiet_NaN() T Representation of quiet (non-signaling) "Not-a-Number", if available.
signaling_NaN() T Representation of signaling "Not-a-Number", if available.
+1. Wikipedia ha alcune informazioni su [quiet NaN] (http://en.wikipedia.org/wiki/NaN#Quiet_NaN) e [segnalando NaN] (http://en.wikipedia.org/wiki/NaN#Signaling_NaN). –
Come altri hanno sottolineato si sta cercando std::numeric_limits<double>::quiet_NaN()
anche se devo dire che preferisco i documenti cppreference.com. Soprattutto perché questa affermazione è un po 'vaga:
Solo significativo se std :: numeric_limits :: has_quiet_NaN == true.
ed è stato semplice per capire cosa questo significa in questo sito, se si controlla la loro sezione std::numeric_limits::has_quiet_NaN
si dice:
Questa costante è significativo per tutti i tipi a virgola mobile ed è garantito per essere vero se std :: numeric_limits :: is_iec559 == true.
che, come ha spiegato here se true
significa che la vostra piattaforma supporta IEEE 754
standard. Questo previous thread spiega questo dovrebbe essere vero per la maggior parte delle situazioni.
Generalmente, non è una buona idea avere numeri non validi nel programma. Può essere molto difficile sbarazzarsi di loro più tardi e possono causare il crash del programma.
Ecco una buona lista di modi per catturare tali numeri senza assegnare a loro: https://studiofreya.com/cpp/1-inf-1-ind-and-qnan-floating-point-numbers-and-errors/#Capturing-errors
In breve, ci sono tre:
- confronto
- utilizzando C++ 11 di serie
- utilizzando parole di controllo _controlfp e _control87
NaN è un numero perfettamente buono da avere (a volte non sono necessarie eccezioni) –
- 1. NaN Magia costante in Java
- 2. costante letterale vs variabile nella libreria matematica
- 3. Converti valore nan a zero
- 4. C++ troncamento del valore costante
- 5. Rimuovi il valore NaN da un set
- 6. jQuery Se il valore è NaN
- 7. Python: valore NaN in Panda solo per un valore singolo
- 8. Confrontando Nan e restituisce un valore nullo valore illogicità
- 9. ALTER TABLE con valore DEFAULT costante costante programmato
- 10. PHP Mail, CC Field
- 11. Funzionamento CC-Tray
- 12. Esiste un valore letterale booleano in SQLite?
- 13. Valore letterale caratteri Java con getNumericValue()
- 14. Valore letterale di data in Hibernate
- 15. -128 come valore letterale binario in Java
- 16. Posso avere un valore negativo come espressione costante in Scala?
- 17. Negativo NaN non è un NaN?
- 18. Pandas sostituire tutti gli elementi di fila con NaN se un valore è NaN
- 19. data di filtro restituisce NaN-NaN-NaN in AngularJS
- 20. Qual è la differenza tra nan, NaN e NAN
- 21. Valore costante in Scala Play Letture JSON
- 22. Memorabile valore a 32 bit come costante
- 23. Come impostare un valore decimale costante
- 24. Operatore condizionale con un valore costante (vero)?
- 25. Specializzazione template C++ con valore costante
- 26. Costante come valore in C++ (11)
- 27. inizializzazione campo diretto con un valore costante
- 28. Strani risultati con confronto valuta/valore costante
- 29. Cosa succede quando assegni una costante letterale a un riferimento di rvalue?
- 30. Quali sono gli altri valori NaN?
Oppure puoi confrontare il numero con se stesso - 'x == x' restituisce' falso' iff 'x' è NaN. – Archie
@Archie: Non penso che sia garantito in entrambe le lingue. –
@MikeSeymour Non secondo lo standard del linguaggio, ma per quanto ne so, dovrebbe funzionare se il compilatore dichiara di essere conforme allo standard IEEE. – Pixelchemist