Problemi stampa long double

di il
10 risposte

Problemi stampa long double

Salve,
ho fatto il seguente programmino per calcolare la distanza e un angolo di inclinazione di due punti in una cartina geografica.
Ho provato a stampare in tutti i modi possibili ma non riesco ad ottenere il risultato corretto.

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


//#define printf __mingw_printf	//enables the MinGW versions of all the printf-family functions

int main() {

	long double a1=43.52893149, a2=43.527705, b1=13.05713832, b2=13.05694788, lat1, lat2, lon1, lon2, lat1r, lat2r,
	       lon1r, lon2r, Pi=3.14159265, Eta, Etar, d;
	int a=6371;

	if (a1>a2){
		lat1=a1;
		lat2=a2;
	}
	else {
		lat1=a2;
		lat2=a1;
	}

	if (b1>b2){
		lon1=b1;
		lon2=b2;
	}
	else {
		lon1=b2;
		lon2=b1;
	}


	lat1r =(Pi*lat1)/180;
	lat2r =(Pi*lat2)/180;
	lon1r =(Pi*lon1)/180;
	lon2r =(Pi*lon2)/180;

	d = acos((sin(lat2r)*sin(lat1r)+(cos(lon2r)*cos(lon1r))*cos(lon1r-lon2r)))*a;

	printf ("La distanza tra i punti GPS è:\n");
	printf ("%Lf;", d);


	Etar = atan(sin(lat2r)*sin(lon1r-lon2r)*sin(lat2r)/(cos(lat2r)-cos(lat1r)*cos(d)));

	Eta = (Etar*180)/Pi;

	printf ("\nLa direzione tra i punti GPS è:\n");
	printf ("%Lf;", Eta);
	printf ("%Lf;", Etar);


	return 0;

}
L'output è:
La distanza tra i punti GPS è:
-2.000000;
La direzione tra i punti GPS è:
-2.000000;-2.000000;


*Le formule le ho testate prima su Excel e dovrebbero essere corrette comunque forniscono un risultato probabile.*


Se metto come float o double (naturalmente cambiando in prontf %f e %lf) ottengo:
La distanza tra i punti GPS è:
-1.#IND00;
La direzione tra i punti GPS è:
-1.#IND00;-1.#IND00;

Quando uso long double ho una segnalazione su printf:

Multiple markers at this line
- unknown conversion type character 'L' in format [-
Wformat=]
- too many arguments for format [-Wformat-extra-args]

Come faccio a stampare correttamente?

10 Risposte

  • Re: Problemi stampa long double

    Con i dati che hai fornito, l'argomento di acos () è 1,42328529763714 ... sei sicuro?
  • Re: Problemi stampa long double

    Grazie per la risposta.

    Facendo con Excel mi porta un'altra cosa...allora:

    SEN(0,759723161)=0,688720756
    SEN(0,759702)=0,688705413
    COS(0,759723161)=0,725026703
    COS(0,759702)=0,725041277
    COS(0,227890051-0,227887)=1
    0,688720756*0,688705413+0,725026703*0,725041277*1 = 0,999999999304871959 --> ARCCOS() = 2,15415E-05

    ....ti farei la stessa domanda...sicuro?
  • Re: Problemi stampa long double

    Questi

    COS(0,759723161)=0,725026703
    COS(0,759702)=0,725041277

    da dove vengono?
  • Re: Problemi stampa long double

    0,759723161 è 43,52893149 in radianti (*3,1415926/180)

    0,759702 è 43,527705 in radianti
  • Re: Problemi stampa long double

    Perché 43,.... e non 13,... ?

    Per i COSeni usi lon2r e lon1r nella formula ....
  • Re: Problemi stampa long double

    Perchè queste sono le due latitudini.
    Il valore di 13,... sono le longitudini.

    Comunque anche per le longitudini faccio lo stesso procedimento in radianti.
  • Re: Problemi stampa long double

    E infatti le longitudini ci sono nella formula !

    cos(lon2r)*cos(lon1r)
  • Re: Problemi stampa long double

    Quindi? .... non ho capito
  • Re: Problemi stampa long double

    Come non hai capito? C'è qualcosa che non va in quello che hai detto... Perché in

    SEN(0,759723161)=0,688720756
    SEN(0,759702)=0,688705413
    COS(0,759723161)=0,725026703
    COS(0,759702)=0,725041277

    gli argomenti dei seni e coseni dici che sono gli stessi e a me vengono diversi?
  • Re: Problemi stampa long double

    Mi sembra che stai chiarendo qui

    http://www.excelvba.it/Forum/thread.php?f=1&t=1063

    No?
Devi accedere o registrarti per scrivere nel forum
10 risposte