Fuzion Logo
flang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.

floats.fz


# This file is part of the Fuzion language implementation.
#
# The Fuzion language implementation is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, version 3 of the License.
#
# The Fuzion language implementation is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License along with The
# Fuzion language implementation.  If not, see <https://www.gnu.org/licenses/>.


# -----------------------------------------------------------------------
#
#  Tokiwa Software GmbH, Germany
#
#  Source code of Fuzion standard library feature wrappingIntegers
#
#  Author: Fridtjof Siebert (siebert@tokiwa.software)
#
# -----------------------------------------------------------------------

# floats -- unit type defining features related to float but not requiring
# an instance
#
#
# floats are binary floating point numbers as defined in the IEEE 754-2019
# standard, see https://ieeexplore.ieee.org/servlet/opac?punumber=8766227
#
floats<T: float<T>> : numerics<T> is

  # number of bytes required to store this value
  #
  bytes i32 is abstract

  # number of bits required to store this value
  #
  size => 8*bytes

  # number of bits used for mantissa, including leading '1' that is not actually
  # stored
  #
  significandBits i32 is abstract

  # number of bits used for exponent
  #
  exponentBits i32 is abstract

  # redef exponentRange => -126..127

  # redef range => f32 # NYI: -3.4028235E38..3.4028235E38

  # minPositive => # NYI:1.4E-45

  # nan => ...

  # infinity =>

  # negInfinity T is abstract