3.2.3c Constantes fraccionarias
§1 Sinopsis
Las constantes fraccionarias (también llamada "de punto flotante") corresponden al concepto matemático de números fraccionarios. Es decir, cantidades con cierto número de cifras decimales. Su representación el código fuente puede contener:
Parte entera 37.092e-2L
Punto decimal [1] 37.092e-2L
Parte fraccionaria 37.092e-2L
e/E y un entero con signo (exponente) 37.092e-2L.
Sufijo (indicador de tipo): f/F ó l/L 37.092e-2L
Pueden omitirse la parte entera o la decimal (pero no ambas); pueden omitirse el punto decimal y la letra E
(e), y el exponente (pero no ambos). Las constantes fraccionarias negativas se forman igual que las
positivas, pero precediéndolas con el operador unitario menos (
- ).
§2 Dos posibles notaciones
Las reglas anteriores permiten utilizar para las constantes fraccionarias dos tipos de notación:
- Notación convencional (de punto decimal)
- Notación científica (con exponente E/e)
Ejemplos:
Expresión Valor
23.45e6 23.45 10^6
.0 0
0. 0.0
1. 1.0
-1.23 -1.23
2e-5 2.0 10^-5
3E+10 3.0 10^10
.09E34 0.09 10^34
Nota: la notación 10^-5 significa 10 elevado a menos 5 ( 10-5 ).
Más información sobre la notación científica en ( 2.2.4a)
§3 En ausencia de cualquier sufijo, las constantes fraccionarias se consideran de tipo double, aunque se
puede obligar a que sea considerada de tipo float añadiéndole el sufijo f ó F.
Ejemplo:
x = 1.; // L.1:
y = 1.f; // L.2:
En L.1 la constante 1.0 es considerada double, y
podría producir una advertencia del compilador: Warning: Initialización to 'int' from 'double'
.
L.2 produciría: Warning: Initialización to 'int' from 'float'
. La razón es que,
por tradición del C, en ausencia de una declaración explícita de tipo, en
expresiones como L.1 y L.2, el compilador C++ supone que x e y son tipo int.
Ejemplo relacionado: ( 2.2.4a)
§4 De forma análoga, el sufijo l / L la fuerza a ser del tipo long double.
Ejemplo:
long lg1 = 3.0; // L.1:
long lg2 = 3.2L; // L.2:
long double = 4.0L; // L.3: Ok.
En L.1el compilador puede mostrar un aviso: Warning: initialization to 'long int' from 'double'
. En L.2 el aviso
sería: Warning: initialization to 'long int' from 'long double'
.
§5 La tabla adjunta muestra los rangos permitidos para los tres tipos
disponibles: float, double y long double.
Tipo Tamaño (bits) Rango .
float 32 3.4 10^-38 a 3.4 10^38
double 64 1.7 10^-308 a 1.7 10^308
long double 80 3.4 10^-4932 a 1.1 10^4932
[1] No se emplea la coma decimal " , " sino el punto " . " (como es costumbre en USA).