# Numeric Supplements
#
# by Shin-ichiro Hara
#
# Version 1.01 (2001.04.10)
class Numeric
def self.unity; 1; end
def self.zero; 0; end
def zero; self.class.zero; end
def unity; self.class.unity; end
def self.indeterminate(x)
eval(x)
end
def self.const(x); x; end
def each; end
def pdivmod(other); divmod(other); end
def unity?; self == 1; end
def unit?; self == unity or self == -unity; end
def monomial?; true; end
def inverse; self == -1 ? -1 : 1; end
def self.field?; true; end
def self.euclidian?; true; end
def self.ufd?; true; end
def self.regulate(x)
# if x.is_a? self
if x.is_a? Numeric
x # Numeric's can be operated each other.
else
nil
end
end
def regulate(x)
self.class.regulate(x)
end
private :regulate
end
class Integer < Numeric
def self.ground; self; end
def self.field?; false; end
# def self.field?; respond_to?(:from_prime_division); end #mathn loaded
def self.euclidian?; true; end
def devide?(other)
case other
when Integer
(other % self).zero?
else
# this case will occur when mathn is required
(other / self) * self == other
# raise "devide?: unkown self.class(#{other})"
end
end
end
class Float < Numeric
def self.unity; 1.0; end
def self.zero; 0.0; end
end
class Complex < Numeric
def self.unity; new(1); end
def self.zero; new(0); end
end
syntax highlighted by Code2HTML, v. 0.9.1