indexing
description: "Real values, single precision"
expanded class interface
REAL
feature -- Access
hash_code: INTEGER
-- Hash code value
-- (from REAL_REF)
ensure -- from HASHABLE
good_hash_value: Result >= 0
item: REAL
-- Numeric real value
-- (from REAL_REF)
one: REAL
-- Neutral element for "*" and "/"
-- (from REAL_REF)
ensure -- from REAL_REF
value: Result = 1.0
sign: INTEGER
-- Sign value (0, -1 or 1)
-- (from REAL_REF)
ensure -- from REAL_REF
three_way: Result = three_way_comparison (zero)
zero: REAL
-- Neutral element for "+" and "-"
-- (from REAL_REF)
ensure -- from REAL_REF
value: Result = 0.0
feature -- Comparison
is_equal (other: like Current): BOOLEAN
-- Is other attached to an object of the same type
-- as current object and identical to it?
-- (from REAL_REF)
require -- COMPARABLE
precursor: True
require -- from GENERAL
other_not_void: other /= void
ensure then -- from COMPARABLE
trichotomy: Result = (not (Current < other) and not (other < Current))
ensure -- from GENERAL
symmetric: Result implies other.is_equal (Current);
consistent: standard_is_equal (other) implies Result
max (other: REAL_REF): REAL
-- The greater of current object and other
-- (from REAL_REF)
require -- from REAL_REF
other_exists: other /= void
min (other: REAL_REF): REAL
-- The smaller of current object and other
-- (from REAL_REF)
require -- from REAL_REF
other_exists: other /= void
three_way_comparison (other: REAL_REF): INTEGER
-- If current object equal to other, 0;
-- if smaller, -1; if greater, 1
-- (from REAL_REF)
require -- from COMPARABLE
other_exists: other /= void
ensure -- from COMPARABLE
equal_zero: (Result = 0) = is_equal (other);
smaller_negative: (Result = - 1) = (Current < other);
greater_positive: (Result = 1) = (Current > other)
infix "<" (other: like Current): BOOLEAN
-- Is other greater than current real?
-- (from REAL_REF)
require -- from PART_COMPARABLE
other_exists: other /= void
ensure then -- from COMPARABLE
asymmetric: Result implies not (other < Current)
infix "<=" (other: like Current): BOOLEAN
-- Is current object less than or equal to other?
-- (from COMPARABLE)
require -- from PART_COMPARABLE
other_exists: other /= void
ensure then -- from COMPARABLE
definition: Result = ((Current < other) or is_equal (other))
infix ">" (other: like Current): BOOLEAN
-- Is current object greater than other?
-- (from COMPARABLE)
require -- from PART_COMPARABLE
other_exists: other /= void
ensure then -- from COMPARABLE
definition: Result = (other < Current)
infix ">=" (other: like Current): BOOLEAN
-- Is current object greater than or equal to other?
-- (from COMPARABLE)
require -- from PART_COMPARABLE
other_exists: other /= void
ensure then -- from COMPARABLE
definition: Result = (other <= Current)
feature -- Status report
divisible (other: REAL_REF): BOOLEAN
-- May current object be divided by other?
-- (from REAL_REF)
require -- from NUMERIC
other_exists: other /= void
ensure then -- from REAL_REF
ref_not_exact_zero: Result implies (other.item /= 0.0)
exponentiable (other: NUMERIC): BOOLEAN
-- May current object be elevated to the power other?
-- (from REAL_REF)
require -- from NUMERIC
other_exists: other /= void
ensure then -- from REAL_REF
safe_values: ((other.conforms_to (0) and item /= 0.0) or (other.conforms_to (0.0) and item > 0.0)) implies Result
is_hashable: BOOLEAN
-- May current object be hashed?
-- (True if it is not its type's default.)
-- (from REAL_REF)
ensure -- from HASHABLE
ok_if_not_default: Result implies (Current /= default)
feature -- Element change
set_item (r: REAL)
-- Make r the value of item.
-- (from REAL_REF)
feature -- Conversion
ceiling: INTEGER
-- Smallest integral value no smaller than current object
-- (from REAL_REF)
ensure -- from REAL_REF
result_no_smaller: Result >= item;
close_enough: Result - item < one
floor: INTEGER
-- Greatest integral value no greater than current object
-- (from REAL_REF)
ensure -- from REAL_REF
result_no_greater: Result <= item;
close_enough: item - Result < one
rounded: INTEGER
-- Rounded integral value
-- (from REAL_REF)
ensure -- from REAL_REF
definition: Result = sign * ((abs + 0.5).floor)
truncated_to_integer: INTEGER
-- Integer part (same sign, largest absolute
-- value no greater than current object's)
-- (from REAL_REF)
feature -- Basic operations
abs: REAL
-- Absolute value
-- (from REAL_REF)
ensure -- from REAL_REF
non_negative: Result >= 0.0;
same_absolute_value: (Result = item) or (Result = - item)
infix "*" (other: like Current): like Current
-- Product by other
-- (from REAL_REF)
require -- from NUMERIC
other_exists: other /= void
ensure -- from NUMERIC
result_exists: Result /= void
infix "+" (other: like Current): like Current
-- Sum with other
-- (from REAL_REF)
require -- from NUMERIC
other_exists: other /= void
ensure -- from NUMERIC
result_exists: Result /= void;
commutative: equal (Result, other + Current)
prefix "+ ": like Current
-- Unary plus
-- (from REAL_REF)
ensure -- from NUMERIC
result_exists: Result /= void
infix "-" (other: like Current): like Current
-- Result of subtracting other
-- (from REAL_REF)
require -- from NUMERIC
other_exists: other /= void
ensure -- from NUMERIC
result_exists: Result /= void
prefix "- ": like Current
-- Unary minus
-- (from REAL_REF)
ensure -- from NUMERIC
result_exists: Result /= void
infix "/" (other: like Current): like Current
-- Division by other
-- (from REAL_REF)
require -- from NUMERIC
other_exists: other /= void;
good_divisor: divisible (other)
ensure -- from NUMERIC
result_exists: Result /= void
infix "^" (other: NUMERIC): DOUBLE
-- Current real to the power other
require -- from NUMERIC
other_exists: other /= void;
good_exponent: exponentiable (other)
ensure -- from NUMERIC
result_exists: Result /= void
feature -- Output
out: STRING
-- Printable representation of real value
-- (from REAL_REF)
invariant
-- from GENERAL
reflexive_equality: standard_is_equal (Current);
reflexive_conformance: conforms_to (Current);
-- from REAL_REF
sign_times_abs: sign * abs = item;
-- from COMPARABLE
irreflexive_comparison: not (Current < Current);
end -- class REAL