2011-06-08 8 views
11

Estoy siguiendo un tutorial sobre cómo hacer un juego con SDL. En cierto punto del tutorial, necesito calcular el FPS del juego. El tutorial hace lo siguiente:¿Qué significa el .f en 1000.f? C++

caption << "Average Frames Per Second: " << frame/(fps.get_ticks()/1000.f); 

Ahora, sé exactamente lo que hace el código, a excepción de la parte donde se divide por 1000.f. He estado buscando pero no puedo encontrar lo que significa .f.

Así que mi pregunta es, ¿qué significa .f? ¿Y por qué está allí?

Respuesta

19

1000 es un literal int.

1000. es un double literal.

1000.f es un float literal.

+0

¿Por qué es un doble y un flotador al mismo tiempo? ¿Por qué harían eso? – 0x499602D2

5

Le está diciendo que el literal 1000. debe tratarse como float. Mire here para más detalles.

8

Significa que esta es una constante float en lugar de una constante double. En cuanto al efecto, en la mayoría de los compiladores de C++, no tendrá ningún efecto ya que el float se convertirá en double para dividir.

5

Significa que 1000.f se trata como un flotador.

4

Un literal de punto flotante puede tener un sufijo de (f, F, l o L). "f y F" especifican una constante float y "l y L" a double.

6

.f marca el número float tipo.

Sólo hay que ver este interesante demostración:

float a = 3.2; 
if (a == 3.2) 
    cout << "a is equal to 3.2"<<endl; 
else 
    cout << "a is not equal to 3.2"<<endl; 

float b = 3.2f; 
if (b == 3.2f) 
    cout << "b is equal to 3.2f"<<endl; 
else 
    cout << "b is not equal to 3.2f"<<endl; 

Salida:

a no es igual a 3.2
b es igual a 3.2f

hacer el experimento aquí en Ideone : http://www.ideone.com/WS1az

Intente cambiar el tipo de la variable a de float a double, vea el resultado de nuevo!

+0

¿No es redundante la 'f' en la asignación' b'? – naught101

+0

@ naught101: Sí. Es redundante prácticamente. Si no lo usa, entonces '3.2' que es' doble' se convertirá a 'float' de todos modos. Por cierto, eso no es * asignación *; eso es * inicialización *. – Nawaz

+0

Ah, gracias. No tengo idea acerca de C++. Presumiblemente, los compiladores serían lo suficientemente inteligentes como para evitar la conversión, y terminarías con el mismo código compilado, ¿verdad? – naught101