C long double Data Type

In C, the long double data type is used to store floating-point numbers with higher precision than float or double.

long double is typically used when more decimal places are required for calculations involving scientific computations, financial calculations, and other precision-sensitive tasks.


1. Storage Size of long double Data Type

The storage size of the long double data type depends on the system and compiler being used. Typically:

System / Compilerlong double Size
32-bit Windows (MSVC)8 bytes (same as double)
64-bit Windows (MSVC – x86_64)8 bytes (same as double)
32-bit Linux (GCC/Clang – x86)12 bytes (80-bit extended precision, padded to 12 or 16 bytes)
64-bit Linux/macOS (GCC/Clang – x86_64, LP64)16 bytes (128-bit precision on some systems)

2. Values Stored by long double Data Type

The long double data type stores floating-point numbers, including:

3.141592653589793238L, -2.718281828459045L, 1.234567890123456789L

It provides a higher degree of precision compared to double and float.

3. Example: Declaring and Using long double Variables

Let’s see a simple program demonstrating how to declare and use long double variables in C.

main.c

</>
Copy
#include <stdio.h>

int main() {
    long double num1 = 3.141592653589793238L;
    long double num2 = -2.718281828459045L;
    
    printf("Value of num1: %.18Lf\n", num1);
    printf("Value of num2: %.18Lf\n", num2);

    return 0;
}

Explanation:

  1. We declare two long double variables num1 and num2.
  2. The suffix L ensures that the values are treated as long double.
  3. We use %.18Lf in printf() to display 18 decimal places.

Output:

Value of num1: 3.141592653589793238
Value of num2: -2.718281828459045000

4. Checking Storage Size of long double Programmatically

We can determine the storage size of long double in bytes using the sizeof operator.

main.c

</>
Copy
#include <stdio.h>

int main() {
    printf("Size of long double: %lu bytes\n", sizeof(long double));
    return 0;
}

Output (varies based on system architecture):

Size of long double: 16 bytes

5. Minimum and Maximum Values of long double

The range of values a long double can store depends on its size:

Storage SizeMinimum ValueMaximum Value
8 bytes±1.2E-308±1.8E+308
16 bytes±3.4E-4932±1.1E+4932

6. Getting Maximum and Minimum Values of long double Programmatically

The maximum and minimum values of a long double can be retrieved using float.h.

main.c

</>
Copy
#include <stdio.h>
#include <float.h>

int main() {
    printf("Minimum long double value: %Le\n", LDBL_MIN);
    printf("Maximum long double value: %Le\n", LDBL_MAX);
    return 0;
}

Output:

Minimum long double value: 3.362103e-4932
Maximum long double value: 1.189731e+4932

Conclusion

In this tutorial, we explored the long double data type in C, including:

  1. Its ability to store high-precision floating-point numbers.
  2. Its typical storage size of 8, 10, 12, or 16 bytes, depending on the system.
  3. How to determine the storage size programmatically using sizeof().
  4. The minimum and maximum values it can store.
  5. How to retrieve these values using float.h.