Store GPS data in variable calculation error

I'm sorry, but I am not clear about the parameter... can u explain more...?

When you call a function you can include a list of values (parameters) that the function can use. Such as

int anInt = 123;
Serial.println(anInt);

Sometimes you want the function to manipulate the values sent and maybe send back the result as in

int startNumber = 123;
int theSquare = squareInt(startInt);
//other code here

int squareInt(int aNumber)  //function to return the square of a number
{
  return aNumber * aNumber;  //return the answer to the calling program
}

Note that the value of startInt is passed to the function and the function does not change its value and that only one value can be returned. This is known as passing by value.

But suppose you want to get more than one value from a function. You can do something like this

gps.f_get_position(&flat, &flon);

Note that the function is not called in the same way. At first glance it would appear that nothing is returned by the function but the variables that it has been called with have a & in front of their name. This is known as calling by reference and in English it means "here is a reference to a variable and you (the function) have permission to make changes to the value of the variable". This is known as passing by reference

So

gps.f_get_position(&flat, &flon);

means "execute the function and put the results in the 2 variables for use later by the main program"

Now look at your working and non working programs and spot the difference between

gps.f_get_position(&flat, &flon);

and

float flon = gps.TinyGPS::f_get_position(flon);