Salve a tutti,
ho bisogno di calcolare in C la radice quadrata di un numero (2, 3 etc...) con la massima precisione possibile.
Ho scaricato DevC++ e usando questo programmino sciocco
Codice:
#include<stdio.h>
#include<math.h>
#include<float.h>
main(){
double radice;
radice=sqrt(3);
printf("%1.20lf \n",radice);
system("pause");
}
ottengo 1.73 205 080 756 887 72.
Un po' poco mi dico.
Scopro che esistono i long double a precisione quadrupla ma devc++ non li supporta. Scarico lcc win32 e provo sia questi long double sia i qfloat, estensione del suddetto compilatore.
il programma usato è il seguente
Codice:
#include<stdio.h>
#include<math.h>
#include<float.h>
#include<qfloat.h>
main(){
long double radice1;
qfloat radice2;
radice1=sqrt(3);
radice2=sqrt(3);
printf("%1.30Lf \n",radice1);
printf("%60.1qg \n",radice2);
system("pause");
}
e i risultati sono
radice1= 1.73 205 080 756 887 719 3 (tutto qua??)
radice2= 1.73 205 080 756 887 719 317 660 412 343 684 583 902 359 008 789 062 5
entrambi ben diversi da (fonte wiki)
1,73 205 080 756 887 7
29 352 744 634 150 587 236 694 280 525 381 038 ...
Allora ho installato Cgywin e tramite gcc ho compilato lo stesso programma mi restituisce
radice1= 1.73 205 080 756 887 7
19 318
ma come?
possibile che sbagli in questo modo? ma perchè?