banalny kod a long double zle wyswietlane

0

Mam problem z użyciem typu long double, popatrzcie:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void main()
{
 long double y=2.1234567890123456789;
 int pola, miejsca;
 printf("Podaj ilosc pol: \n");
 scanf("%d",&pola);
 printf("\nPodaj ilosc miejsc po przecinku: \n");
 scanf("%d",&miejsca);
 printf("%*.*f\n",pola,miejsca,y);
 system("pause");
}

Gdy używam zwykłego double, wszystko działa (tj. wyświetla liczbę z żądaną precyzją). Gdy jest long double, wyświetla się -0 (z żądaną precyzją ;)). Co jest źle?

0

Previous 16-bit versions of Microsoft C/C++ and Microsoft Visual C++ supported the long double, 80-bit precision data type. In Win32 programming, however, the long double data type maps to the double, 64-bit precision data type.

Jeżeli podasz long double (z kompilatora który traktuje ten typ jako 80-bitowy) do funkcji z systemowego dll, to otrzymasz niewłaściwy wynik, ponieważ (tu) printf oczekuje 64 bitów zamiast 80.
Jeżeli koniecznie chcesz użyć long double, to użyj też funkcji printf która go odbsłuży, czyli tej z biblioteki standardowej kompilatora, zamiast z systemowego dll.

1 użytkowników online, w tym zalogowanych: 0, gości: 1