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

f32.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 f32
#
#  Author: Fridtjof Siebert (siebert@tokiwa.software)
#
# -----------------------------------------------------------------------

# f32 -- 32 bit floating point values
#
#
# f32 are binary32-numbers as defined in the IEEE 754-2019 standard, see
# https://ieeexplore.ieee.org/servlet/opac?punumber=8766227
#
f32(val f32) : float<f32>, hasInterval<f32>, f32s is

  redef thiz        => f32.this.val
  redef orderedThis => f32.this.val


  # basic operations: 'prefix -' (negation)
  redef prefix - f32 is intrinsic
  infix + (other f32) f32 is intrinsic
  infix - (other f32) f32 is intrinsic
  infix * (other f32) f32 is intrinsic
  infix / (other f32) f32 is intrinsic
  infix % (other f32) f32 is intrinsic
  infix ** (other f32) f32 is intrinsic


  # comparison
  redef infix == (other f32) bool is intrinsic
  redef infix != (other f32) bool is intrinsic
  redef infix <  (other f32) bool is intrinsic
  redef infix <= (other f32) bool is intrinsic
  redef infix >  (other f32) bool is intrinsic
  redef infix >= (other f32) bool is intrinsic


  # conversion
  as_i64 i64
    pre
      safety: f32.this >= from_i64 i64.min && f32.this <= from_i64 i64.max
    is
      as_f64.as_i64
  as_f64 f64
    is
      fuzion.std.panic "NYI: f32.as_f64"


  # casting bit representation to u32
  castTo_u32 u32 is intrinsic


  # create hash code from this number
  hash u64 is
    castTo_u32.hash


  # convert this to a string.
  #
  redef asString string is intrinsic