(***********************************************************************) (* *) (* Applied Type System *) (* *) (***********************************************************************) (* ** ATS/Postiats - Unleashing the Potential of Types! ** Copyright (C) 2010-2015 Hongwei Xi, ATS Trustful Software, Inc. ** All rights reserved ** ** ATS is free software; you can redistribute it and/or modify it under ** the terms of the GNU GENERAL PUBLIC LICENSE (GPL) as published by the ** Free Software Foundation; either version 3, or (at your option) any ** later version. ** ** ATS 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 ATS; see the file COPYING. If not, please write to the ** Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ** 02110-1301, USA. *) (* ****** ****** *) (* ** Source: ** $PATSHOME/prelude/SATS/CODEGEN/gnumber.atxt ** Time of generation: Thu Jan 11 11:00:07 2018 *) (* ****** ****** *) (* Author: Hongwei Xi *) (* Authoremail: hwxi AT cs DOT bu DOT edu *) (* Start time: September, 2011 *) (* ****** ****** *) (* Author: Brandon Barker *) (* Authoremail: brandon.barker AT gmail DOT com *) (* Start time: July, 2013 *) (* ****** ****** *) // // HX: for unindexed gnumber types // (* ****** ****** *) sortdef tk = tkind (* ****** ****** *) typedef SHR(a: type) = a // for commenting purpose typedef NSH(a: type) = a // for commenting purpose (* ****** ****** *) abstype fprecision_prop(a1: t0p, a2: t0p) propdef fprecision (a1 : t0p, a2 : t0p) = fprecision_prop(a1, a2) praxi fprecision_float() : fprecision(float, float) praxi fprecision_double() : fprecision(double, double) praxi fprecision_ldouble() : fprecision(ldouble, ldouble) (* ****** ****** *) // // HX: generic number operations // (* ****** ****** *) // // fun {a:t0p} gnumber_int (x : int) :<> a fun {a:t0p} gnumber_double (x : double) :<> a // (* ****** ****** *) fun {a:t0p} gabs_val (x : a) :<> a fun {a:t0p} gneg_val (x : a) :<> a fun {a:t0p} gsucc_val (x : a) :<> a fun {a:t0p} gpred_val (x : a) :<> a fun {a:t0p} grecip_val (x : a) : a (* ****** ****** *) fun {a:t0p} gadd_val_val (x : a, y : a) :<> a fun {a:t0p} gsub_val_val (x : a, y : a) :<> a fun {a:t0p} gmul_val_val (x : a, y : a) :<> a fun {a:t0p} gdiv_val_val (x : a, y : a) : a fun {a:t0p} gmod_val_val (x : a, y : a) : a (* ****** ****** *) // fun {a:t0p} gadd_val_int (x : a, y : int) :<> a fun {a:t0p} gsub_val_int (x : a, y : int) :<> a // fun {a:t0p} gmul_int_val (x : int, y : a) :<> a fun {a:t0p} gmul_val_int (x : a, y : int) :<> a // fun {a:t0p} gdiv_int_val (x : int, y : a) : a fun {a:t0p} gdiv_val_int (x : a, y : int) : a fun {a:t0p} gmod_val_int (x : a, y : int) : a // (* ****** ****** *) fun {a:t0p} gsqrt_val (x : a) : a (* ****** ****** *) fun {a:t0p} gconjugate_val (x : a) :<> a (* ****** ****** *) fun {a:t0p} gpow_int_val (n : intGte(0), x : a) :<> a (* ****** ****** *) (* end of [gnumber.sats] *)