Difference between revisions of "NUMERIC (interface)"

 
Line 1: Line 1:
 
[[Category:ELKS]]
 
[[Category:ELKS]]
 +
__TOC__
 +
 +
==Class Interface==
 +
 +
<code>[eiffel,N]
 +
indexing
 +
  description: "Objects to which numerical operations are applicable";
 +
  note: "The model is that of a commutative ring."
 +
 +
deferred class interface NUMERIC
 +
 +
feature -- Access
 +
 +
  one: like Current
 +
      -- Neutral element for "*" and "/"
 +
    deferred
 +
    ensure
 +
      Result_exists: Result /= Void
 +
 +
  zero: like Current
 +
      -- Neutral element for "+" and "-"
 +
    deferred
 +
    ensure
 +
      Result_exists: Result /= Void
 +
 +
feature -- Status report
 +
 +
  divisible (other: like Current): BOOLEAN
 +
      -- May current object be divided by other?
 +
    require
 +
      other_exists: other /= Void
 +
    deferred
 +
 
 +
  exponentiable (other: NUMERIC): BOOLEAN
 +
      -- May current object be elevated to the power other?
 +
    require
 +
      other_exists: other /= Void
 +
    deferred
 +
 +
  is_special_case: BOOLEAN
 +
      -- Is current object an special case regarding numeric operations?
 +
      -- Special cases are cases where normal mathematical rules don't
 +
      -- apply. Mostly this happens because of the binary represantation
 +
      -- of the numeric.
 +
    deferred
 +
 +
feature -- Basic operations
 +
 +
  infix "+" (other: like Current): like Current
 +
      -- Sum with other (commutative).
 +
    require
 +
      other_exists: other /= Void
 +
    deferred
 +
    ensure
 +
      result_exists: Result /= Void;
 +
      commutative: equal (Result, other + Current)
 +
 +
  infix "-" (other: like Current): like Current
 +
      -- Result of subtracting other
 +
    require
 +
      other_exists: other /= Void
 +
    deferred
 +
    ensure
 +
      result_exists: Result /= Void
 +
 +
  infix "*" (other: like Current): like Current
 +
      -- Product by other
 +
    require
 +
      other_exists: other /= Void
 +
    deferred
 +
    ensure
 +
      result_exists: Result /= Void
 +
 +
  infix "/" (other: like Current): like Current
 +
      -- Division by other
 +
    require
 +
      other_exists: other /= Void;
 +
      good_divisor: divisible (other)
 +
    deferred
 +
    ensure
 +
      result_exists: Result /= Void
 +
 +
  infix "^" (other: NUMERIC): NUMERIC
 +
      -- Current object to the power other
 +
    require
 +
      other_exists: other /= Void;
 +
      good_exponent: exponentiable (other)
 +
    deferred
 +
    ensure
 +
      result_exists: Result /= Void
 +
 +
  prefix "+": like Current
 +
      -- Unary plus
 +
    deferred
 +
    ensure
 +
      result_exists: Result /= Void
 +
 +
  prefix "-": like Current
 +
      -- Unary minus
 +
    deferred
 +
    ensure
 +
      result_exists: Result /= Void
 +
 +
invariant
 +
 +
  neutral_addition: not is_special_case implies equal (Current + zero, Current);
 +
  self_subtraction: not is_special_case implies equal (Current - Current, zero);
 +
  neutral_multiplication: not is_special_case implies equal (Current * one, Current);
 +
  self_division: divisible not is_special_case implies (Current) implies equal (Current / Current, one)
 +
 +
</code>
 +
 +
==Changes to ELKS 95==
 +
 +
new features:
 +
* is_special_case
 +
 +
changed invariants:
 +
* all

Revision as of 08:02, 22 November 2006

Class Interface

indexing
  description: "Objects to which numerical operations are applicable";
  note: "The model is that of a commutative ring."
 
deferred class interface NUMERIC
 
feature -- Access
 
  one: like Current
      -- Neutral element for "*" and "/"
    deferred
    ensure
      Result_exists: Result /= Void
 
  zero: like Current
      -- Neutral element for "+" and "-"
    deferred
    ensure
      Result_exists: Result /= Void
 
feature -- Status report
 
  divisible (other: like Current): BOOLEAN
      -- May current object be divided by other?
    require
      other_exists: other /= Void
    deferred
 
  exponentiable (other: NUMERIC): BOOLEAN
      -- May current object be elevated to the power other?
    require
      other_exists: other /= Void
    deferred
 
  is_special_case: BOOLEAN
      -- Is current object an special case regarding numeric operations?
      -- Special cases are cases where normal mathematical rules don't
      -- apply. Mostly this happens because of the binary represantation 
      -- of the numeric.
    deferred
 
feature -- Basic operations
 
  infix "+" (other: like Current): like Current
      -- Sum with other (commutative).
    require
      other_exists: other /= Void
    deferred
    ensure
      result_exists: Result /= Void;
      commutative: equal (Result, other + Current)
 
  infix "-" (other: like Current): like Current
      -- Result of subtracting other
    require
      other_exists: other /= Void
    deferred
    ensure
      result_exists: Result /= Void
 
  infix "*" (other: like Current): like Current
      -- Product by other
    require
      other_exists: other /= Void
    deferred
    ensure
      result_exists: Result /= Void
 
  infix "/" (other: like Current): like Current
      -- Division by other
    require
      other_exists: other /= Void;
      good_divisor: divisible (other)
    deferred
    ensure
      result_exists: Result /= Void
 
  infix "^" (other: NUMERIC): NUMERIC
      -- Current object to the power other
    require
      other_exists: other /= Void;
      good_exponent: exponentiable (other)
    deferred
    ensure
      result_exists: Result /= Void
 
  prefix "+": like Current
      -- Unary plus
    deferred
    ensure
      result_exists: Result /= Void
 
  prefix "-": like Current
      -- Unary minus
    deferred
    ensure
      result_exists: Result /= Void
 
invariant
 
  neutral_addition: not is_special_case implies equal (Current + zero, Current);
  self_subtraction: not is_special_case implies equal (Current - Current, zero);
  neutral_multiplication: not is_special_case implies equal (Current * one, Current);
  self_division: divisible not is_special_case implies (Current) implies equal (Current / Current, one)

Changes to ELKS 95

new features:

  • is_special_case

changed invariants:

  • all