Esercizio - Scoprire i tipi a virgola mobile

Completato

In questo esercizio si useranno tipo di dati a virgola mobile per comprendere le differenze tra ogni tipo di dati.

Con virgola mobile si intende un tipo di valore semplice che rappresenta i numeri a destra della posizione decimale. A differenza dei numeri integrali, esistono altre considerazioni oltre ai valori minimo e massimo che è possibile archiviare in un determinato tipo a virgola mobile.

Valutare i tipi a virgola mobile

In primo luogo, è necessario considerare le cifre di precisione consentite da ogni tipo. La precisione è il numero di posizioni del valore che possono essere archiviate dopo la virgola decimale.

In secondo luogo, è necessario considerare il modo in cui i valori vengono archiviati e il conseguente effetto sulla precisione del valore. Ad esempio, i valori float e double vengono archiviati internamente in un formato binario (base 2) mentre decimal viene archiviato in un formato decimale (base 10). Perché è importante?

L'esecuzione di calcoli matematici su valori a virgola mobile binari può dare risultati che potrebbero sorprendere se si è abituati ai calcoli decimali (base 10). Spesso, i calcoli con numeri a virgola mobile binari sono un'approssimazione del valore reale. float e double sono quindi utili perché si possono archiviare numeri elevati usando un footprint della memoria ridotto. Tuttavia, float e double devono essere usati solo quando è utile un'approssimazione. Ad esempio, quando si calcolano gli schizzi di una palla di neve in un videogioco, è sufficiente un numero ridotto di millesimi.

Quando è necessaria una risposta più precisa, è consigliabile usare decimal. Ogni valore di tipo decimal ha un footprint della memoria relativamente elevato, tuttavia l'esecuzione di operazioni matematiche offre un risultato più preciso. È quindi consigliabile usare decimal quando si lavora con dati finanziari o in qualsiasi scenario in cui sia necessario ottenere un risultato accurato da un calcolo.

Usare le proprietà MinValue e MaxValue per ogni tipo float con segno

  1. Eliminare o usare l'operatore di commento riga // per impostare come commento tutto il codice degli esercizi precedenti.

  2. Per visualizzare gli intervalli di valori per i vari tipi di dati, aggiornare il codice nell'editor di Visual Studio Code come indicato di seguito:

Console.WriteLine("");
Console.WriteLine("Floating point types:");
Console.WriteLine($"float  : {float.MinValue} to {float.MaxValue} (with ~6-9 digits of precision)");
Console.WriteLine($"double : {double.MinValue} to {double.MaxValue} (with ~15-17 digits of precision)");
Console.WriteLine($"decimal: {decimal.MinValue} to {decimal.MaxValue} (with 28-29 digits of precision)");
  1. Nel menu File di Visual Studio Code selezionare Salva.

    Il file Program.cs deve essere salvato prima di compilare o eseguire il codice.

  2. Nel pannello ESPLORA RISORSE, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject, quindi scegliere Apri nel terminale integrato.

    Verrà aperto un pannello del terminale con un prompt dei comandi che indica che il terminale è aperto al percorso della cartella TestProject.

  3. Nel prompt dei comandi del terminale digitare dotnet run per eseguire il codice e quindi premere INVIO.

    Se viene visualizzato un messaggio che indica "Impossibile trovare un progetto da eseguire", assicurarsi che il prompt dei comandi del terminale visualizzi il percorso previsto della cartella TestProject. Ad esempio: C:\Users\someuser\Desktop\csharpprojects\TestProject>

    Verrà visualizzato l'output seguente:

    Floating point types:
    float  : -3.402823E+38 to 3.402823E+38 (with ~6-9 digits of precision)
    double : -1.79769313486232E+308 to 1.79769313486232E+308 (with ~15-17 digits of precision)
    decimal: -79228162514264337593543950335 to 79228162514264337593543950335 (with 28-29 digits of precision)
    

Come si può vedere, float e double usano una notazione diversa di quella usata da decimal per rappresentare i possibili valori più grandi e più piccoli. Che cosa indica questa notazione?

Decifrazione di valori a virgola mobile elevati

Poiché i tipi a virgola mobile possono contenere numeri grandi con precisione, i valori possono essere rappresentati usando la "notazione E", che è una forma di notazione scientifica che equivale a "per 10 elevato alla potenza di". Un valore come 5E+2 corrisponde quindi al valore 500 perché è l'equivalente di 5 * 10^2 o 5 x 102.

Riepilogo

  • Un tipo a virgola mobile è un tipo di dati valore semplice che può contenere numeri frazionari.
  • Per scegliere il tipo a virgola mobile corretto per l'applicazione, è necessario considerare altri elementi oltre ai valori massimo e minimo che può contenere. È anche necessario considerare quanti valori possono essere conservati dopo il separatore decimale, come vengono archiviati i numeri e come l'archiviazione interna influisce sul risultato delle operazioni matematiche.
  • In alcuni casi i valori a virgola mobile possono essere rappresentati con la "notazione E" quando i numeri diventano particolarmente grandi.
  • Esiste una differenza fondamentale nel modo in cui il compilatore e il runtime gestiscono decimal rispetto a float o double, soprattutto quando si determina il livello di accuratezza necessario per le operazioni matematiche.

Verificare le conoscenze

1.

Qual è il tipo di dati migliore da usare per elaborare i depositi bancari?