Tipos reales

Explicación

Los tipos reales se dividen en reales en coma flotante y reales en coma fija; los reales en coma fija pueden a su vez ser ordinarios o decimales. En todos los casos representan aproximaciones de los números reales matemáticos, con un límite de error relativo en el caso de coma flotante y absoluto en el caso de coma fija. Está predefinido el tipo Float que designa números reales en coma flotante.

Para los tipos en coma fija se debe especificar el límite absoluto de error (delta), que debe ser potencia de 10 en el caso de los decimales (para los que también se debe especificar el número total de dígitos a representar), y si se desea un rango real.

La entrada y salida de valores de un tipo real en coma flotante se realiza instanciando el paquete Ada.Text_IO.Float_IO. La entrada/salida de valores de un tipo real en coma fija ordinario se realiza instanciando el paquete Ada.Text_IO.Fixed_IO. La entrada/salida de valores de un tipo real en coma fija decimal se realiza instanciando el paquete Ada.Text_IO.Decimal_IO. Se puede realizar entrada/salida de valores del tipo predefinido Float usando el paquete no genérico Ada.Float_Text_IO.

A los tipos enteros les son aplicables los atributos generales de los tipos escalares, en particular los atributos de los tipos reales.

Sintaxis de la declaración de tipos reales

real_full_type_declaration ::= 
     type defining_identifier is real_type_definition;
real_type_definition ::= 
   floating_point_definition | fixed_point_definition
floating_point_definition ::= 
   digits static_expression [real_range_specification]

real_range_specification ::= 
   range static_simple_expression .. static_simple_expression

fixed_point_definition ::= ordinary_fixed_point_definition | decimal_fixed_point_definition

ordinary_fixed_point_definition ::= 
   delta static_expression real_range_specification

decimal_fixed_point_definition ::= 
   delta static_expression digits static_expression [real_range_specification]

digits_constraint ::= 
   digits static_expression [range_constraint]

Ejemplo de declaración de tipos reales

--  Coma flotante
type Real is digits 8;
type Real_Corto is digits 5 range -1.0 .. 1.0;
--  Coma fija
type Real_Fijo is delta 0.125 range -100000.0 .. 100000.0;    --  ordinaria
type Tipo_Dec is delta 0.01 digits 6 range -1000.00..1000.00; --  decimal

Ejemplo de declaración de objetos de tipo real

Un_Real, Otro_Real : Float;
Pi         : constant Float := 3.141628;
Un_Fijo    : Real_Fijo;
Un_Decimal : Tipo_Dec;

Ejemplo de literales reales

125.25		--  Valor 125.25
125.25E-1	--  Valor 12.525
125.25e+3	--  Valor 125250.0
2#1001.111#	--  Valor 9.875, en base 2
8#7123.6#	--  Valor 3667.75, en base 8
16#7f2a.6#E-2	--  Valor 127.16553, en base 16