Τι είναι το double στην C#;

Στην C#, το double είναι ένας τύπος δεδομένων που χρησιμοποιείται για την αποθήκευση δεκαδικών αριθμών. Το double προέρχεται από τον όρο “double precision floating-point” (δεκαδικός αριθμός διπλής ακρίβειας) και χρησιμοποιείται για την αποθήκευση μεγάλων και ακριβών δεκαδικών τιμών.

Το double αποθηκεύει τους αριθμούς σε διπλή ακρίβεια, που σημαίνει ότι μπορεί να αποθηκεύει πολύ μεγαλύτερους αριθμούς ή με περισσότερα δεκαδικά ψηφία από έναν τύπο όπως το float.

Ιδιότητες του double

  1. Εύρος Τιμών:
    • Ένας τύπος double μπορεί να αποθηκεύσει αριθμούς μεταξύ ±5.0 × 10^−324 έως ±1.7 × 10^308.
    • Το double μπορεί να αποθηκεύει πολύ μεγάλες ή πολύ μικρές τιμές λόγω της δεκαδικής αναπαράστασής του σε μορφή επιστημονικής σημειογραφίας.
  2. Ακρίβεια:
    • Ο τύπος double έχει ακρίβεια περίπου 15-16 σημαντικών ψηφίων. Αυτό σημαίνει ότι μπορεί να αποθηκεύσει τιμές με αρκετά ακριβή αναπαράσταση για πολλά αριθμητικά προβλήματα.
    • Για παράδειγμα, αν αποθηκεύσεις τον αριθμό 3.14159265358979 (τιμή του π), η ακρίβεια του double είναι αρκετή για να αποθηκεύσει τα πρώτα 15 δεκαδικά ψηφία.
  3. Μνήμη:
    • Ένας τύπος double καταλαμβάνει 8 bytes (64 bit) μνήμης. Αυτή η μνήμη χρησιμοποιείται για την αποθήκευση τόσο του αριθμού όσο και του εκθέτη (για μεγάλους ή πολύ μικρούς αριθμούς).
  4. Σύνταξη:
    • Δημιουργείς μια μεταβλητή τύπου double στην C# όπως θα έκανες και με άλλους τύπους δεδομένων:
double x = 3.14;
double y = -2.5;
  1. Προεπιλεγμένη τιμή:
    • Αν δηλώσεις μια μεταβλητή double χωρίς να της αναθέσεις τιμή, η προεπιλεγμένη τιμή θα είναι 0.0.

Χρήση του double

Ο τύπος double είναι κατάλληλος για περιπτώσεις όπου χρειάζεσαι να αποθηκεύσεις αριθμούς με δεκαδικά ψηφία ή πολύ μεγάλες/μικρές τιμές. Είναι επίσης πολύ χρήσιμος σε μαθηματικές πράξεις που απαιτούν ακρίβεια.

Παράδειγμα:

using System;

class Program
{
    static void Main()
    {
        // Δημιουργία και χρήση του double
        double num1 = 3.14159;
        double num2 = 10.5;

        // Εκτέλεση μαθηματικών πράξεων
        double sum = num1 + num2;
        double difference = num1 - num2;
        double product = num1 * num2;
        double quotient = num1 / num2;

        // Εμφάνιση αποτελεσμάτων
        Console.WriteLine($"Άθροισμα: {sum}");
        Console.WriteLine($"Διαφορά: {difference}");
        Console.WriteLine($"Γινόμενο: {product}");
        Console.WriteLine($"Πηλίκο: {quotient}");
    }
}

Επιστημονική Σημειογραφία

Στο double, μπορείς να χρησιμοποιήσεις την επιστημονική σημειογραφία για να αναπαραστήσεις μεγάλους ή πολύ μικρούς αριθμούς. Χρησιμοποιείς το γράμμα E (ή e) για να αναπαραστήσεις τον εκθέτη.

Παράδειγμα:

double bigNumber = 1.23e6; // Ισοδυναμεί με 1.23 * 10^6, δηλαδή 1,230,000
double smallNumber = 4.56e-4; // Ισοδυναμεί με 4.56 * 10^-4, δηλαδή 0.000456

Αριθμητικές Πράξεις με double

Το double υποστηρίζει όλες τις βασικές αριθμητικές πράξεις, όπως:

  • Άθροισμα: +
  • Αφαίρεση: -
  • Πολλαπλασιασμός: *
  • Διαίρεση: /

Παράδειγμα αριθμητικών πράξεων:

double a = 5.5;
double b = 2.0;

double sum = a + b;       // Άθροισμα: 7.5
double difference = a - b;  // Διαφορά: 3.5
double product = a * b;   // Γινόμενο: 11.0
double quotient = a / b;  // Πηλίκο: 2.75

Προβλήματα Ακρίβειας (Floating Point Precision)

Οι αριθμοί τύπου double είναι αριθμοί κινητής υποδιαστολής και αυτό σημαίνει ότι δεν μπορούν πάντα να αποθηκεύσουν με ακρίβεια όλες τις τιμές με δεκαδικά. Αυτό μπορεί να προκαλέσει μικρά σφάλματα ακρίβειας σε ορισμένες περιπτώσεις.Παράδειγμα:

double a = 0.1;

double b = 0.2;

double result = a + b;

Console.WriteLine(result); // Εκτυπώνει 0.30000000000000004 αντί για 0.3

Αυτό το πρόβλημα οφείλεται στην αναπαράσταση των αριθμών κινητής υποδιαστολής στους υπολογιστές. Παρόλο που οι αποκλίσεις είναι συνήθως μικρές, μπορεί να έχουν σημασία σε ευαίσθητες εφαρμογές (όπως οικονομικές συναλλαγές), οπότε σε τέτοιες περιπτώσεις ίσως προτιμηθεί ο τύπος decimal που προσφέρει μεγαλύτερη ακρίβεια.

Μετατροπή double σε άλλους τύπους

Μπορείς να μετατρέψεις έναν αριθμό τύπου double σε άλλους αριθμητικούς τύπους, όπως int ή float, αλλά θα πρέπει να είσαι προσεκτικός γιατί μπορεί να υπάρξει απώλεια ακρίβειας.

Παράδειγμα μετατροπής:

double d = 3.99;
int i = (int)d;  // Η μετατροπή θα κόψει τα δεκαδικά και θα δώσει την τιμή 3
Console.WriteLine(i);  // Εκτυπώνει: 3

Χρήσιμες Συναρτήσεις με το double

Μπορείς να χρησιμοποιήσεις τη βιβλιοθήκη Math για να εκτελέσεις διάφορες μαθηματικές λειτουργίες με τιμές τύπου double.

Παράδειγμα:

double value = -4.5;

// Απόλυτη τιμή
double absValue = Math.Abs(value);  // Εκτυπώνει: 4.5

// Στρογγυλοποίηση
double rounded = Math.Round(value);  // Εκτυπώνει: -4

// Δύναμη
double power = Math.Pow(2, 3);  // 2^3 = 8

// Τετραγωνική ρίζα
double sqrtValue = Math.Sqrt(16);  // Εκτυπώνει: 4

Χρήση του double σε πραγματικό σενάριο:

Σκέψου ότι θέλεις να φτιάξεις ένα πρόγραμμα που υπολογίζει την περιφέρεια και την επιφάνεια ενός κύκλου, με βάση την ακτίνα του:

using System;

class Program
{
    static void Main()
    {
        Console.Write("Δώσε την ακτίνα του κύκλου: ");
        double radius = double.Parse(Console.ReadLine());

        double perimeter = 2 * Math.PI * radius;
        double area = Math.PI * Math.Pow(radius, 2);

        Console.WriteLine($"Η περιφέρεια του κύκλου είναι: {perimeter}");
        Console.WriteLine($"Η επιφάνεια του κύκλου είναι: {area}");
    }
}