|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 40
|
[c++ / identificare se un double è intero]
Ciao a tutti,
ho un dubbio ... supponiamo che un'espressione mi restituisca un numero double. Come posso fare per capire se il numero che mi ha restituito, pur rimanendo un double, è anche matematicamente un intero? Per esempio: Numero double 1.6667 Numero double 2.0000 C'è una procedura che mi permetta di identificare i numeri restituiti come il secondo? Avrei bisogno di questa info per capire come posso scartare da un conteggio tutti i numeri da 1 a 10.000 la cui radice quadrata sia un numero intero. Grazie anticipatamente, Unslee |
|
|
|
|
|
#2 | ||
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Temo però che, o la cosa sia impossibile, o ci sia qualche funzione di libreria che lo fa. Quote:
Codice:
int k = (int)sqrt(n); // k: massimo intero non maggiore di sqrt(n) if (n==k*k) cout << n << " ha la radice quadrata intera" << endl; else cout << n << " non ha la radice quadrata intera" << endl;
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
||
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Direi che il metodo di ZioSilvio e' il piu' efficiente.
Se invece ti interessa a priori conoscere se un numero in virgola mobile e' in realta' un numero Naturale, entro certi limiti puoi usare la seguente: if (d == Round(d)) then ... Ovvero, se il numero e' uguale al troncamento ad intero del numero, allora e' naturale... Tale check funziona solo fino ad un certo valore, per la natura della rappresentazione interna dei numeri in virgola mobile (che e' il dubbio di ziosivlio penso) sui float a 32bit tale limite e' 2^23 = 8388608 (23 e' la mantissa dei virgola mobile 32bit) sui double a 64bit tale limite e' 2^52 = 4503599627370496
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 40
|
Come sempre siete eccezionali!
Non riuscivo a trovare una soluzione ed adesso ne ho ben tre! Veramente grazie. Con la soluzione di Ziosilvio ho appena finito di risolvere il prob ed il programma gira correttamente. Adesso mi testo anche le altre due per vedere se l'applicazione si velocizza e soprattutto per scienza personale! Buona serata a tutti e ancora grazie, Unslee |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:15.




















