Mówisz, że nie ma różnicy w precyzji?
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
float resultf;
double resultd;
long double resultld;
long double inputld;
double inputd;
float inputf;
printf("Wielkość typów:
long double: %lu
double: %lu
float: %lu
",
sizeof(long double), sizeof(double), sizeof(float));
printf("Wprowadź liczbę do pierwiastkowania: ");
fscanf(stdin, "%Lf", &inputld);
inputd = (double)inputld;
inputf = (float)inputld;
resultf = sqrt(inputf);
resultd = sqrt(inputd);
resultld = sqrtl(inputld);
printf("double: %.25f
long double: %.25Lf
float: %.25f", resultd, resultld, resultf);
return 0;
}
Kod: Zaznacz cały
$ ./calc
Wielkość typów:
long double: 16
double: 8
float: 4
Wprowadź liczbę do pierwiastkowania: 2
double: 1.4142135623730951454746219
long double: 1.4142135623730950487637881
float: 1.4142135381698608398437500
Edit:
Przesadziłem też z długością dokładności, co już poprawiłem. Ale właśnie taki jest problem z liczbami zmiennoprzecinkowymi o stałej ilości bitów - większy wykładnik - mniej dokładna mantysa.
Cóż, dopóki nie zaimplementuje się własnej arytmetyki dowolnej precyzji - musimy polegać na "mało dokładnych" wynikach