I did some additional testing with binary representation of floats on both systems.
C++:
float myFloat = 0.090650305151939f;
printf ("%lu\n", sizeof (myFloat)); // 4 bytes
printf ("%.15f\n", myFloat);
printf ("%lu\n", sizeof (int)); // 4 bytes
int myInt = *(int *) &myFloat; // copy float bytes to int bytes
cout << myInt << endl; // 1035577054
Arduino:
float myFloat = 0.090650305151939f;
Serial.println (sizeof (myFloat)); // 4 bytes
Serial.println (String (myFloat, 15));
Serial.println (sizeof (long)); // 4 bytes
long myLong = *(long *) &myFloat; // copy float bytes to long bytes
Serial.println (myLong); // 1035577054
Binary both results are the same. The problem must be with the output then.