QuadFloat.st
author Claus Gittinger <cg@exept.de>
Mon, 25 Nov 2019 01:14:57 +0100
changeset 5287 16a42e9d5748
parent 5276 b81062a163d4
child 5290 8572a1e6ceba
permissions -rw-r--r--
disabled (for now)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
LimitedPrecisionReal variableByteSubclass:#QuadFloat
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	instanceVariableNames:''
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	classVariableNames:'QuadFloatZero QuadFloatOne Pi E Epsilon NaN PositiveInfinity
5269
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
     8
		NegativeInfinity Halfpi HalfpiNegative Phi'
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	poolDictionaries:''
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
	category:'Magnitude-Numbers'
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
    13
!QuadFloat primitiveDefinitions!
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
    14
%{
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
    15
#ifdef __xxosx__
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
    16
# define SUPPORT_QUADFLOAT
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
    17
#endif
5027
49e378bf72b7 leftover debug prints
Claus Gittinger <cg@exept.de>
parents: 5025
diff changeset
    18
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    19
#include <math.h>
4998
1ed27f918576 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4997
diff changeset
    20
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    21
extern float128_t STX_addq(float128_t, float128_t, int);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    22
extern float128_t STX_mulq(float128_t, float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    23
extern float128_t STX_divq(float128_t, float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    24
extern float128_t STX_negq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    25
extern float128_t STX_absq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    26
extern float128_t STX_floorq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    27
extern float128_t STX_frexpq(float128_t, int*);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    28
extern float128_t STX_ceilq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    29
extern float128_t STX_logq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    30
extern float128_t STX_log10q(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    31
extern float128_t STX_log2q(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    32
extern float128_t STX_expq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    33
extern float128_t STX_sinq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    34
extern float128_t STX_cosq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    35
extern float128_t STX_tanq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    36
extern float128_t STX_sinhq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    37
extern float128_t STX_coshq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    38
extern float128_t STX_tanhq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    39
extern float128_t STX_asinq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    40
extern float128_t STX_acosq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    41
extern float128_t STX_atanq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    42
extern float128_t STX_asinhq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    43
extern float128_t STX_acoshq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    44
extern float128_t STX_atanhq(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    45
extern float128_t STX_qZero;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    46
extern float128_t STX_dbltoq(double);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    47
extern float128_t STX_inttoq(long);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    48
extern double STX_qtodbl(float128_t);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    49
extern int STX_isNanq(float128_t*);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    50
extern int STX_prcmpq(float128_t*, float128_t*);
5013
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
    51
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    52
#define STX_isfiniteq(q)    (!STX_isNanq(&(q)) && !STX_isInfq(&(q)))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    53
#define STX_eqq(x1, x2)     (STX_prcmpq (&(x1), &(x2)) == 0)
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    54
#define STX_neqq(x1, x2)    (STX_prcmpq (&(x1), &(x2)) != 0)
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    55
#define STX_gtq(x1, x2)     (STX_prcmpq (&(x1), &(x2)) > 0)
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    56
#define STX_geq(x1, x2)     (STX_prcmpq (&(x1), &(x2)) >= 0)
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    57
#define STX_ltq(x1, x2)     (STX_prcmpq (&(x1), &(x2)) < 0)
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    58
#define STX_leq(x1, x2)     (STX_prcmpq (&(x1), &(x2)) <= 0)
4992
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
    59
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    60
#ifdef __win32__
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    61
/*
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    62
 * no finite(x) ?
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    63
 * no isnan(x) ?
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    64
 */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    65
# ifndef isnan
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    66
#  define isnan(x)      \
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    67
	((((unsigned int *)(&x))[0] == 0x00000000) && \
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    68
	 (((unsigned int *)(&x))[1] == 0xFFF80000))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    69
# endif
4992
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
    70
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    71
# ifndef isPositiveInfinity
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    72
#  define isPositiveInfinity(x) \
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    73
	((((unsigned int *)(&x))[0] == 0x00000000) && \
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    74
	 (((unsigned int *)(&x))[1] == 0x7FF00000))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    75
# endif
4992
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
    76
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    77
# ifndef isNegativeInfinity
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    78
#  define isNegativeInfinity(x) \
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    79
	((((unsigned int *)(&x))[0] == 0x00000000) && \
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    80
	 (((unsigned int *)(&x))[1] == 0xFFF00000))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    81
# endif
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
    82
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    83
# ifndef isinf
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    84
#  define isinf(x) \
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    85
	((((unsigned int *)(&x))[0] == 0x00000000) && \
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    86
	 ((((unsigned int *)(&x))[1] & 0x7FF00000) == 0x7FF00000))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    87
# endif
4992
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
    88
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    89
# ifndef isfinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    90
#  define isfinite(x) (!isinf(x) && !isnan(x))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    91
# endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    92
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
    93
#else // not win32
5269
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
    94
#endif
4993
c7956a3ab780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
    95
4992
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
    96
%}
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
    97
! !
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
    98
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
    99
!QuadFloat primitiveVariables!
5267
a9529d2468bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5266
diff changeset
   100
%{
a9529d2468bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5266
diff changeset
   101
%}
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   102
! !
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   103
4992
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
   104
!QuadFloat primitiveFunctions!
5267
a9529d2468bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5266
diff changeset
   105
%{
a9529d2468bb *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5266
diff changeset
   106
%}
4992
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
   107
! !
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   108
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
!QuadFloat class methodsFor:'documentation'!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
documentation
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    QuadFloats represent rational numbers with limited precision
5007
97def4a232e9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5006
diff changeset
   114
    and are mapped to IEEE quadruple precision format (128bit),
97def4a232e9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5006
diff changeset
   115
    also called binary128.
97def4a232e9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5006
diff changeset
   116
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    If the underlying cpu supports them natively, the machine format (long double) is
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
    used. Otherwise, a software emulation is done, which is much slower.
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    Thus only use them, if you really need the additional precision;
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    if not, use Float (which are doubles) or LongFloats which usually have IEEE extended precision (80bit).
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    QuadFloats give you definite 128 bit quadruple floats,
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    thus, code using quadFloats is guaranteed to be portable from one architecture to another.
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    Representation:
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   126
	    128bit quadruple IEEE floats (16bytes);
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   127
	    112 bit mantissa,
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   128
	    16 bit exponent,
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   129
	    34 decimal digits (approx.)
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
4992
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
   131
    On Sparc CPUs, this is a native supported type (long double) and fast;
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
   132
    on x86 CPUs, this is emulated and slow.
ee1d80769d4c first code for add
Claus Gittinger <cg@exept.de>
parents: 4991
diff changeset
   133
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    Mixed mode arithmetic:
5007
97def4a232e9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5006
diff changeset
   135
	quadFloat op anyFloat    -> quadFloat
97def4a232e9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5006
diff changeset
   136
	anyFloat op quadFloat    -> quadFloat
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    Range and precision of storage formats: see LimitedPrecisionReal >> documentation
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    [author:]
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   141
	Claus Gittinger
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    [see also:]
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   144
	Number
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   145
	Float ShortFloat LongFloat Fraction FixedPoint Integer Complex
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   146
	FloatArray DoubleArray
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   147
	https://en.wikipedia.org/wiki/Extended_precision
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
! !
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
!QuadFloat class methodsFor:'instance creation'!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
basicNew
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    "return a new quadFloat - here we return 0.0
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
     - QuadFloats are usually NOT created this way ...
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
     Its implemented here to allow things like binary store & load
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
     of quadFloats.
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
     (but it is not a good idea to store the bits of a float - the reader might have a
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
      totally different representation - so floats should be
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
      binary stored in a device independent format)."
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
%{  /* NOCONTEXT */
4993
c7956a3ab780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
   163
#ifdef SUPPORT_QUADFLOAT
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    OBJ newFloat;
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   165
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   166
    if (sizeof(long double) == sizeof(float128_t)) {
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   167
	__qMKLFLOAT(newFloat, 0.0);   /* OBJECT ALLOCATION */
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    } else {
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   169
	float128_t qf = STX_qZero;
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   170
	__qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    }
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    RETURN (newFloat);
4993
c7956a3ab780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
   173
#endif /* SUPPORT_QUADFLOAT */
c7956a3ab780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
   174
%}.
c7956a3ab780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
   175
    self error:'QuadFloats not supported on this patform'
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
    "Created: / 06-06-2019 / 17:18:58 / Claus Gittinger"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
fromFloat:aFloat
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    "return a new quadFloat, given a float value"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
%{  /* NOCONTEXT */
4993
c7956a3ab780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
   184
#ifdef SUPPORT_QUADFLOAT
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
    OBJ newFloat;
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
    if (__isFloatLike(aFloat)) {
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   188
	double f = __floatVal(aFloat);
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   189
	float128_t qf;
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   190
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   191
	qf = STX_dbltoq (f);
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   192
	__qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   193
	RETURN (newFloat);
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
    }
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   195
#endif /*
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   196
*/
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
%}.
4993
c7956a3ab780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
   198
    aFloat isFloat ifTrue:[
4997
55c76587b49c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4994
diff changeset
   199
	self errorUnsupported
4993
c7956a3ab780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
   200
    ].
4997
55c76587b49c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4994
diff changeset
   201
    ArgumentError raise
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
    "
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
     QuadFloat fromFloat:123.0
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
     123.0 asQuadFloat
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
     123 asQuadFloat
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
    "
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
    "Created: / 06-06-2019 / 18:01:03 / Claus Gittinger"
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   210
!
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   211
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   212
fromInteger:anInteger
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   213
    "return a new quadFloat, given an integer value"
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   214
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   215
%{  /* NOCONTEXT */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   216
#ifdef SUPPORT_QUADFLOAT
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   217
    OBJ newFloat;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   218
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   219
    if (__isSmallInteger(anInteger)) {
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   220
	INT iVal = __intVal(anInteger);
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   221
	float128_t qf;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   222
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   223
	qf = STX_inttoq( (long)iVal );
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   224
	__qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   225
	RETURN (newFloat);
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   226
    }
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   227
#endif /* SUPPORT_QUADFLOAT */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   228
%}.
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   229
    ^ super fromInteger:anInteger
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   230
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   231
    "
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   232
     QuadFloat fromInteger:123
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   233
     123 asQuadFloat
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   234
    "
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   235
!
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   236
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   237
fromLongFloat:aFloat
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   238
    "return a new quadFloat, given a long float value"
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   239
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   240
%{  /* NOCONTEXT */
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   241
#ifdef xSUPPORT_QUADFLOAT
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   242
    OBJ newFloat;
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   243
    union {
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   244
	LONGFLOAT_t lf;         // is long double
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   245
	extFloat80_t ef;        // is 80bit ext
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   246
	float128_t qf;          // is 128bit quad
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   247
    } u;
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   248
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   249
    if (__isLongFloat(aFloat)) {
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   250
	u.lf = __longFloatVal(aFloat);
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   251
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   252
	if (sizeof(LONGFLOAT_t) == 16) {
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   253
	    // longFloat is already 128 bits in size (sparc)
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   254
	    __qMKQFLOAT(newFloat, u.qf);   /* OBJECT ALLOCATION */
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   255
	    RETURN (newFloat);
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   256
	}
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   257
	if (sizeof(LONGFLOAT_t) < 16) {
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   258
	    // assume 80bit extended float format (amd64, x86_64)
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   259
	    u.qf = extF80_to_f128( u.ef);
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   260
	    __qMKQFLOAT(newFloat, u.qf);   /* OBJECT ALLOCATION */
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   261
	    RETURN (newFloat);
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   262
	}
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   263
	// fall into error case
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   264
    }
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   265
#endif /* SUPPORT_QUADFLOAT */
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   266
%}.
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   267
    aFloat isLongFloat ifTrue:[
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   268
	self errorUnsupported
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   269
    ].
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   270
    ArgumentError raise
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   271
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   272
    "
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   273
     QuadFloat fromLongFloat:123.0 asLongFloat
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   274
    "
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   275
!
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   276
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   277
fromShortFloat:aShortFloat
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   278
    "return a new quadFloat, given a float value"
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   279
5013
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   280
    ^ self fromFloat:(aShortFloat asFloat)
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   281
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   282
    "
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   283
     QuadFloat fromShortFloat:123.0 asShortFloat
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   284
    "
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   285
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   286
    "Created: / 08-06-2019 / 03:28:37 / Claus Gittinger"
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
! !
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
!QuadFloat class methodsFor:'coercing & converting'!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
coerce:aNumber
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
    "convert the argument aNumber into an instance of the receiver's class and return it."
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
    ^ aNumber asQuadFloat.
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
    "Created: / 06-06-2019 / 16:51:01 / Claus Gittinger"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
! !
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
!QuadFloat class methodsFor:'constants'!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
NaN
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   302
    "return a quadFloat which represents not-a-Number (i.e. an invalid number)"
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   303
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   304
    |nan|
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
    NaN isNil ifTrue:[
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   307
%{  /* NOCONTEXT */
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   308
#ifdef xSUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   309
	{
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   310
	    OBJ newFloat;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   311
	    float128_t qf;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   312
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   313
	    softfloat_commonNaNToF128M( (uint32_t*)(&qf) );
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   314
	    __qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   315
	    nan = newFloat;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   316
	}
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   317
#endif /* SUPPORT_QUADFLOAT */
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   318
%}.
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   319
	nan isNil ifTrue:[
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   320
	    self errorUnsupported
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   321
	].
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   322
	NaN := nan
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
    ].
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
    ^ NaN
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
e
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
    "return the constant e as quadFloat"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
    E isNil ifTrue:[
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   331
	"/ eDigits has enough digits for 128bit IEEE quads
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   332
	"/ do not use as a literal constant here - we cannot depend on the underlying C-compiler here...
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   333
	E  := self readFrom:(Number eDigits)
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
    ].
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
    ^ E
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
    "Created: / 06-06-2019 / 17:01:54 / Claus Gittinger"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   340
infinity
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   341
    "return a quadFloat which represents +INF"
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   342
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   343
    |inf|
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   344
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   345
    PositiveInfinity isNil ifTrue:[
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   346
%{  /* NOCONTEXT */
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   347
#ifdef xSUPPORT_QUADFLOAT
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   348
	{
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   349
	    OBJ newFloat;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   350
	    struct uint128 uiZ;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   351
	    union ui128_f128 uZ;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   352
	    float128_t qf;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   353
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   354
	    uiZ.v64 = packToF128UI64( 0, 0x7FFF, 0 );
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   355
	    uiZ.v0 = 0;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   356
	    uZ.ui = uiZ;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   357
	    qf = uZ.f;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   358
	    __qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   359
	    inf = newFloat;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   360
	}
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   361
#endif /* SUPPORT_QUADFLOAT */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   362
%}.
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   363
	inf isNil ifTrue:[
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   364
	    self errorUnsupported
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   365
	].
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   366
	PositiveInfinity := inf
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   367
    ].
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   368
    ^ PositiveInfinity
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   369
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   370
    "Created: / 08-06-2019 / 14:05:26 / Claus Gittinger"
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   371
!
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   372
5012
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   373
negativeInfinity
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   374
    "return a quadFloat which represents -INF"
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   375
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   376
    |inf|
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   377
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   378
    NegativeInfinity isNil ifTrue:[
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   379
%{  /* NOCONTEXT */
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   380
#ifdef xSUPPORT_QUADFLOAT
5013
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   381
	{
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   382
	    OBJ newFloat;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   383
	    struct uint128 uiZ;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   384
	    union ui128_f128 uZ;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   385
	    float128_t qf;
5012
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   386
5013
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   387
	    uiZ.v64 = packToF128UI64( 1, 0x7FFF, 0 );
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   388
	    uiZ.v0 = 0;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   389
	    uZ.ui = uiZ;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   390
	    qf = uZ.f;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   391
	    __qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   392
	    inf = newFloat;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   393
	}
5012
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   394
#endif /* SUPPORT_QUADFLOAT */
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   395
%}.
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   396
	inf isNil ifTrue:[
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   397
	    self errorUnsupported
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   398
	].
5013
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   399
	NegativeInfinity := inf
5012
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   400
    ].
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   401
    ^ NegativeInfinity
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   402
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   403
    "Created: / 08-06-2019 / 14:05:50 / Claus Gittinger"
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   404
!
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   405
5264
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   406
phi
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   407
    "return the constant phi as quadFloat"
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   408
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   409
    Phi isNil ifTrue:[
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   410
	"/ phiDigits has enough digits for 128bit IEEE quads
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   411
	"/ do not use as a literal constant here - we cannot depend on the underlying C-compiler here...
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   412
	Phi  := self readFrom:(Number phiDigits)
5264
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   413
    ].
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   414
    ^ Phi
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   415
!
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   416
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
pi
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
    "return the constant pi as quadFloat"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
    Pi isNil ifTrue:[
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   421
	"/ piDigits has enough digits for 128bit IEEE quads
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   422
	"/ do not use as a literal constant here - we cannot depend on the underlying C-compiler here...
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   423
	Pi  := self readFrom:(Number piDigits)
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
    ].
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
    ^ Pi
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
    "Created: / 06-06-2019 / 17:09:51 / Claus Gittinger"
5006
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   428
!
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   429
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   430
unity
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   431
    "return the neutral element for multiplication (1.0) as QuadFloat"
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   432
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   433
    QuadFloatOne isNil ifTrue:[
5007
97def4a232e9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5006
diff changeset
   434
	QuadFloatOne := 1.0 asQuadFloat.
5006
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   435
    ].
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   436
    ^ QuadFloatOne
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   437
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   438
    "Created: / 07-06-2019 / 03:26:38 / Claus Gittinger"
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   439
!
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   440
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   441
zero
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   442
    "return the neutral element for addition (0.0) as QuadFloat"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   443
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   444
    QuadFloatZero isNil ifTrue:[
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   445
	QuadFloatZero := 0.0 asQuadFloat
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   446
    ].
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   447
    ^ QuadFloatZero
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   448
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   449
    "Created: / 07-06-2019 / 09:22:56 / Claus Gittinger"
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
! !
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
   452
!QuadFloat class methodsFor:'error reportng'!
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   453
4997
55c76587b49c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4994
diff changeset
   454
errorUnsupported
55c76587b49c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4994
diff changeset
   455
    self error:'QuadFloats not supported on this patform'
55c76587b49c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4994
diff changeset
   456
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
   457
    "Created: / 07-06-2019 / 02:44:39 / Claus Gittinger"
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   458
! !
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   459
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   460
!QuadFloat class methodsFor:'queries'!
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   461
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   462
epsilon
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   463
    "return the maximum relative spacing of instances of mySelf
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   464
     (i.e. the value-delta of the least significant bit)"
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   465
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   466
    Epsilon isNil ifTrue:[
5020
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
   467
	Epsilon := self computeEpsilon.
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   468
    ].
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   469
    ^ Epsilon
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   470
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   471
    "
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   472
     self epsilon
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   473
    "
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   474
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   475
    "Created: / 10-06-2019 / 21:21:18 / Claus Gittinger"
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   476
!
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   477
5018
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   478
exponentCharacter
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   479
    "return the character used to print between mantissa an exponent.
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   480
     Also used by the scanner when reading numbers."
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   481
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   482
    ^ $Q
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   483
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   484
    "Created: / 10-06-2019 / 21:28:04 / Claus Gittinger"
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   485
!
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   486
5025
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   487
numBitsInExponent
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   488
    "answer the number of bits in the exponent.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   489
     This is an IEEE 128bit quadfloat, where 15 bits are available in the exponent:
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   490
	seeeeeee eeeeeeee mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm...
5025
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   491
    "
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   492
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   493
    ^ 15
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   494
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   495
    "
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   496
     1.0 class numBitsInExponent -> 11
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   497
     1.0 asShortFloat class numBitsInExponent -> 8
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   498
     1.0 asLongFloat class numBitsInExponent -> 15
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   499
     1.0 asQuadFloat class numBitsInExponent -> 15
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   500
    "
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   501
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   502
    "Created: / 11-06-2019 / 00:14:55 / Claus Gittinger"
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   503
!
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   504
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   505
numBitsInMantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   506
    "answer the number of bits in the mantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   507
     the hidden bit is not counted here:
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   508
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   509
     This is an 128bit quadfloat,
5007
97def4a232e9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5006
diff changeset
   510
	   where 112 bits are available in the mantissa:
97def4a232e9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5006
diff changeset
   511
	seeeeeee eeeeeeee mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm mmmmmmmm...
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   512
    "
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   513
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   514
    ^ 112
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   515
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   516
    "
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   517
     1.0 class numBitsInMantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   518
     1.0 asShortFloat class numBitsInMantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   519
     1.0 asLongFloat class numBitsInMantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   520
     1.0 asQuadFloat class numBitsInMantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   521
    "
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   522
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   523
    "Created: / 07-06-2019 / 03:24:20 / Claus Gittinger"
5056
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   524
!
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   525
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   526
radix
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   527
    "answer the radix of a QuadFloat's exponent
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   528
     This is an IEEE float, which is represented as binary"
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   529
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   530
    ^ 2 "must be careful here, whenever ST/X is used on VAX or a 370"
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   531
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   532
    "Created: / 19-07-2019 / 17:28:00 / Claus Gittinger"
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   533
! !
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   534
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   535
!QuadFloat methodsFor:'arithmetic'!
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   536
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   537
* aNumber
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   538
    "return the product of the receiver and the argument."
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   539
5074
7eaede72d204 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5056
diff changeset
   540
    aNumber class == QuadFloat ifTrue:[
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   541
	^ aNumber productFromQuadFloat:self
5074
7eaede72d204 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5056
diff changeset
   542
    ].
7eaede72d204 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5056
diff changeset
   543
5075
18cba5cb7d94 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
   544
    thisContext isReallyRecursive ifTrue:[self error].
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   545
    ^ aNumber productFromQuadFloat:self
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   546
!
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   547
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   548
+ aNumber
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   549
    "return the sum of the receiver and the argument, aNumber"
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   550
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   551
    ^ aNumber sumFromQuadFloat:self
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   552
!
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   553
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   554
- aNumber
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   555
    "return the difference of the receiver and the argument, aNumber"
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   556
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   557
    ^ aNumber differenceFromQuadFloat:self
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   558
!
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   559
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   560
/ aNumber
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   561
    "return the quotient of the receiver and the argument, aNumber"
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   562
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   563
    aNumber isZero ifTrue:[
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   564
	"
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   565
	 No, you shalt not divide by zero
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   566
	"
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   567
	^ ZeroDivide raiseRequestWith:thisContext.
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   568
    ].
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   569
    ^ aNumber quotientFromQuadFloat:self
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   570
!
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   571
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   572
abs
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   573
    "return the absolute value of the receiver
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   574
     reimplemented here for speed"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   575
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   576
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   577
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   578
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   579
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   580
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   581
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   582
    result = STX_absq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   583
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   584
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   585
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   586
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   587
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   588
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   589
ceiling
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   590
    "return the smallest integer which is greater or equal to the receiver."
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   591
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   592
    |val|
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   593
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   594
%{
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   595
#ifdef SUPPORT_QUADFLOAT
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   596
    float128_t qVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   597
    float128_t qMinInt;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   598
    float128_t qMaxInt;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   599
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   600
    qVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   601
    qVal = STX_ceilq(qVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   602
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   603
    qMinInt = STX_dbltoq((double)_MIN_INT);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   604
    qMaxInt = STX_dbltoq((double)_MAX_INT);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   605
    if (STX_geq(qVal, qMinInt) && STX_leq(qVal, qMaxInt)) {
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   606
	double dVal = STX_qtodbl(qVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   607
	RETURN ( __mkSmallInteger( (INT) dVal ) );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   608
    }
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   609
    __qMKQFLOAT(val, qVal);
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   610
#endif
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   611
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   612
    ^ val asInteger
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   613
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   614
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   615
     0.5 asQuadFloat ceiling
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   616
     0.5 asQuadFloat ceilingAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   617
     -0.5 asQuadFloat ceiling
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   618
     -0.5 asQuadFloat ceilingAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   619
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   620
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   621
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   622
ceilingAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   623
    "return the smallest integer-valued float greater or equal to the receiver.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   624
     This is much like #ceiling, but avoids a (possibly expensive) conversion
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   625
     of the result to an integer.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   626
     It may be useful, if the result is to be further used in another float-operation."
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   627
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   628
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   629
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   630
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   631
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   632
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   633
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   634
    result = STX_ceilq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   635
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   636
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   637
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   638
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   639
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   640
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   641
cos
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   642
    "return the cosine of the receiver (interpreted as radians)"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   643
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   644
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   645
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   646
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   647
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   648
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   649
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   650
    result = STX_cosq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   651
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   652
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   653
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   654
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   655
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   656
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   657
cosh
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   658
    "return the hyperbolic cosine of the receiver (interpreted as radians)"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   659
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   660
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   661
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   662
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   663
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   664
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   665
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   666
    result = STX_coshq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   667
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   668
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   669
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   670
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   671
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   672
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   673
exp
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   674
    "return e raised to the power of the receiver"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   675
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   676
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   677
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   678
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   679
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   680
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   681
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   682
    result = STX_expq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   683
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   684
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   685
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   686
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   687
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   688
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   689
exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   690
    "extract a normalized float's (unbiased) exponent.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   691
     The returned value depends on the float-representation of
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   692
     the underlying machine and is therefore highly unportable.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   693
     This is not for general use.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   694
     This assumes that the mantissa is normalized to
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   695
     0.5 .. 1.0 and the float's value is: mantissa * 2^exp"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   696
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   697
%{  /* NOCONTEXT */
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   698
#ifdef SUPPORT_QUADFLOAT
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   699
    float128_t myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   700
    float128_t frac;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   701
    int exp;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   702
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   703
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   704
#if 1
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   705
    // should we?
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   706
    if (! (STX_isNanq(&myVal) || STX_isInfq(&myVal)))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   707
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   708
    {
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   709
	frac = STX_frexpq(myVal, &exp);
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   710
	RETURN (__mkSmallInteger(exp));
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   711
    }
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   712
#endif
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   713
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   714
    ^ super exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   715
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   716
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   717
     1.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   718
     1.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   719
     2.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   720
     2.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   721
     3.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   722
     3.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   723
     4.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   724
     4.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   725
     0.5 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   726
     0.5 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   727
     0.4 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   728
     0.4 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   729
     0.25 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   730
     0.25 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   731
     0.2 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   732
     0.2 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   733
     0.00000011111 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   734
     0.00000011111 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   735
     0.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   736
     0.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   737
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   738
     1e1000 exponent -> error (INF)
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   739
     1e1000 asQuadFloat exponent -> error (INF)
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   740
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   741
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   742
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   743
floor
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   744
    "return the integer nearest the receiver towards negative infinity."
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   745
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   746
    |val|
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   747
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   748
%{
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   749
#ifdef SUPPORT_QUADFLOAT
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   750
    float128_t qVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   751
    float128_t qMinInt;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   752
    float128_t qMaxInt;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   753
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   754
    qVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   755
    qVal = STX_floorq(qVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   756
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   757
    qMinInt = STX_dbltoq((double)_MIN_INT);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   758
    qMaxInt = STX_dbltoq((double)_MAX_INT);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   759
    if (STX_geq(qVal, qMinInt) && STX_leq(qVal, qMaxInt)) {
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   760
	double dVal = STX_qtodbl(qVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   761
	RETURN ( __mkSmallInteger( (INT) dVal ) );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   762
    }
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   763
    __qMKQFLOAT(val, qVal);
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   764
#endif
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   765
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   766
    ^ val asInteger
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   767
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   768
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   769
     0.5 asQuadFloat floor
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   770
     0.5 asQuadFloat floorAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   771
     -0.5 asQuadFloat floor
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   772
     -0.5 asQuadFloat floorAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   773
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   774
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   775
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   776
floorAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   777
    "return the integer nearest the receiver towards negative infinity as a float.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   778
     This is much like #floor, but avoids a (possibly expensive) conversion
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   779
     of the result to an integer.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   780
     It may be useful, if the result is to be further used in another float-operation."
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   781
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   782
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   783
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   784
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   785
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   786
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   787
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   788
    result = STX_floorq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   789
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   790
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   791
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   792
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   793
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   794
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   795
ln
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   796
    "return natural logarithm of the receiver."
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   797
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   798
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   799
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   800
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   801
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   802
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   803
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   804
    result = STX_logq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   805
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   806
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   807
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   808
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   809
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   810
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   811
log
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   812
    "return log base 10 of the receiver.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   813
     Alias for log:10."
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   814
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   815
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   816
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   817
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   818
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   819
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   820
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   821
    result = STX_log10q(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   822
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   823
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   824
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   825
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   826
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   827
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   828
log2
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   829
    "return logarithm dualis of the receiver."
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   830
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   831
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   832
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   833
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   834
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   835
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   836
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   837
    result = STX_log2q(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   838
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   839
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   840
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   841
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   842
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   843
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   844
mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   845
    "extract a normalized float's mantissa.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   846
     The returned value depends on the float-representation of
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   847
     the underlying machine and is therefore highly unportable.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   848
     This is not for general use.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   849
     This assumes that the mantissa is normalized to
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   850
     0.5 .. 1.0 and the float's value is mantissa * 2^exp"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   851
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   852
%{  /* NOCONTEXT */
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   853
#ifdef SUPPORT_QUADFLOAT
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   854
    float128_t myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   855
    float128_t frac;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   856
    int exp;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   857
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   858
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   859
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   860
    // ouch: math libs seem to not care for NaN here;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   861
#if 1
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   862
    // should we?
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   863
    if (! (STX_isNanq(&myVal) || STX_isInfq(&myVal)))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   864
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   865
    {
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   866
	frac = STX_frexpq(myVal, &exp);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   867
	__qMKQFLOAT(newFloat, frac);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   868
	RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   869
    }
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   870
#endif
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   871
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   872
    ^ super mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   873
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   874
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   875
     1.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   876
     1.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   877
     1.0 mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   878
     1.0 asQuadFloat mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   879
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   880
     0.25 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   881
     0.25 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   882
     0.25 mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   883
     0.25 asQuadFloat mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   884
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   885
     0.00000011111 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   886
     0.00000011111 mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   887
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   888
     1e1000 mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   889
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   890
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   891
    "Modified: / 20-06-2017 / 11:37:13 / cg"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   892
    "Modified (comment): / 26-05-2019 / 03:12:55 / Claus Gittinger"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   893
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   894
5021
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   895
negated
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   896
    "return the receiver negated"
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   897
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   898
%{  /* NOCONTEXT */
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   899
#ifdef SUPPORT_QUADFLOAT
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   900
    OBJ newFloat;
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   901
    float128_t result, myVal;
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   902
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   903
    myVal = __quadFloatVal(self);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   904
    result = STX_negq(myVal);
5021
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   905
    __qMKQFLOAT(newFloat, result);
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   906
    RETURN ( newFloat );
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   907
#endif
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   908
%}.
5025
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   909
!
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   910
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   911
rem: aNumber
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   912
    "return the floating point remainder of the receiver and the argument, aNumber"
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   913
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   914
    aNumber isZero ifTrue:[
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   915
	"
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   916
	 No, you shalt not divide by zero
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   917
	"
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   918
	^ ZeroDivide raiseRequestWith:thisContext.
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   919
    ].
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   920
    ^ aNumber remainderFromLongFloat:self
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   921
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   922
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   923
sin
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   924
    "return the sine of the receiver (interpreted as radians)"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   925
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   926
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   927
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   928
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   929
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   930
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   931
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   932
    result = STX_sinq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   933
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   934
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   935
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   936
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   937
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   938
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   939
sinh
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   940
    "return the hyperbolic sine of the receiver (interpreted as radians)"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   941
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   942
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   943
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   944
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   945
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   946
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   947
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   948
    result = STX_sinhq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   949
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   950
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   951
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   952
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   953
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   954
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   955
tan
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   956
    "return the tangent of the receiver (interpreted as radians)"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   957
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   958
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   959
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   960
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   961
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   962
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   963
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   964
    result = STX_tanq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   965
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   966
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   967
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   968
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   969
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   970
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   971
tanh
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   972
    "return the hyperbolic tangent of the receiver (interpreted as radians)"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   973
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   974
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   975
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   976
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   977
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   978
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   979
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   980
    result = STX_tanhq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   981
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   982
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   983
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   984
%}.
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   985
! !
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   986
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   987
!QuadFloat methodsFor:'coercing & converting'!
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   988
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   989
asFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   990
    "return a Float with same value as the receiver.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   991
     Raises an error if the receiver exceeds the float range."
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   992
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   993
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   994
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   995
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   996
    float128_t qVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   997
    double dVal = STX_qtodbl(qVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   998
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   999
    if (isfinite(dVal) || !STX_isfiniteq(qVal)) {
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1000
	__qMKFLOAT(newFloat, dVal);
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1001
	RETURN ( newFloat );
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1002
    }
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1003
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1004
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1005
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1006
     value out of range
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1007
     if you need -INF for a zero receiver, try Number trapInfinity:[...]
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1008
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1009
    ^ self class
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1010
	raise:#infiniteResultSignal
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1011
	receiver:self
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1012
	selector:#asFloat
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1013
	arguments:#()
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1014
	errorString:'receiver is out of the double-precision float range'
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1015
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1016
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1017
     1.0 asQuadFloat asFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1018
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1019
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1020
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1021
generality
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1022
    "return the generality value - see ArithmeticValue>>retry:coercing:"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1023
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1024
    ^ 93
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1025
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1026
    "Created: / 07-06-2019 / 09:30:58 / Claus Gittinger"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1027
! !
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1028
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1029
!QuadFloat methodsFor:'comparing'!
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1030
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1031
< aNumber
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1032
    "return true, if the argument is greater"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1033
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1034
    ^ aNumber lessFromQuadFloat:self
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1035
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1036
    "Created: / 07-06-2019 / 09:25:47 / Claus Gittinger"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1037
!
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1038
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1039
= aNumber
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1040
    "return true, if the argument represents the same numeric value
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1041
     as the receiver, false otherwise"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1042
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1043
    ^ aNumber equalFromQuadFloat:self
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1044
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1045
    "Created: / 07-06-2019 / 09:25:27 / Claus Gittinger"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1046
!
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1047
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1048
hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1049
    "return a number for hashing; redefined, since floats compare
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1050
     by numeric value (i.e. 3.0 = 3), therefore 3.0 hash must be the same
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1051
     as 3 hash."
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1052
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1053
    |i|
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1054
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1055
    (self >= SmallInteger minVal and:[self <= SmallInteger maxVal]) ifTrue:[
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1056
	i := self asInteger.
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1057
	self = i ifTrue:[
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1058
	    ^ i hash
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1059
	].
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1060
    ].
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1061
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1062
    ^ self asFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1063
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1064
    "
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1065
     1.2345 hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1066
     1.2345 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1067
     1.2345 asLongFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1068
     1.2345 asQuadFloat hash
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1069
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1070
     1.0 hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1071
     1.0 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1072
     1.0 asLongFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1073
     1.0 asQuadFloat hash
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1074
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1075
     0.5 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1076
     0.5 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1077
     0.5 asLongFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1078
     0.5 asQuadFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1079
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1080
     0.25 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1081
     0.25 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1082
     0.25 asLongFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1083
     0.25 asQuadFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1084
    "
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1085
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1086
    "Created: / 07-06-2019 / 09:28:07 / Claus Gittinger"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1087
! !
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1088
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1089
!QuadFloat methodsFor:'double dispatching'!
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1090
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1091
differenceFromQuadFloat:aQuadFloat
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1092
%{
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1093
#ifdef SUPPORT_QUADFLOAT
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1094
    OBJ newFloat;
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1095
    float128_t result, myVal, argVal;
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1096
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1097
    myVal = __quadFloatVal(self);
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1098
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1099
    result = STX_addq( argVal, myVal, 1 );
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1100
    __qMKQFLOAT(newFloat, result);
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1101
    RETURN ( newFloat );
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1102
#endif // SUPPORT_QUADFLOAT
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1103
%}.
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1104
    self errorUnsupported
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1105
!
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1106
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1107
equalFromQuadFloat:aQuadFloat
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1108
    "sent when aQuadFloat does not know how to compare agaist the receiver, self"
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1109
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1110
%{
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1111
#ifdef SUPPORT_QUADFLOAT
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1112
    OBJ newFloat;
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1113
    float128_t result, myVal, argVal;
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1114
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1115
    myVal = __quadFloatVal(self);
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1116
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1117
    RETURN (STX_eqq(argVal, myVal) ? true : false);
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1118
#endif // SUPPORT_QUADFLOAT
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1119
%}.
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1120
    self errorUnsupported
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1121
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1122
    "Modified: / 08-06-2019 / 13:31:48 / Claus Gittinger"
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1123
!
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1124
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1125
lessFromQuadFloat:aQuadFloat
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1126
    "sent when aQuadFloat does not know how to compare agaist the receiver, self"
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1127
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1128
%{
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1129
#ifdef SUPPORT_QUADFLOAT
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1130
    OBJ newFloat;
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1131
    float128_t result, myVal, argVal;
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1132
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1133
    myVal = __quadFloatVal(self);
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1134
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1135
    RETURN (STX_ltq(argVal, myVal) ? true : false);
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1136
#endif // SUPPORT_QUADFLOAT
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1137
%}.
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1138
    self errorUnsupported
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1139
!
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1140
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1141
productFromQuadFloat:aQuadFloat
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1142
    "sent when aQuadFloat does not know how to multiply the receiver, self"
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1143
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1144
%{
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1145
#ifdef SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1146
    OBJ newFloat;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1147
    float128_t result, myVal, argVal;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1148
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1149
    myVal = __quadFloatVal(self);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1150
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1151
    result = STX_mulq(myVal, argVal);
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1152
    __qMKQFLOAT(newFloat, result);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1153
    RETURN ( newFloat );
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1154
#endif // SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1155
%}.
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1156
    self errorUnsupported
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1157
!
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1158
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1159
quotientFromQuadFloat:aQuadFloat
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1160
    "sent when aQuadFloat does not know how to multiply the receiver, self"
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1161
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1162
%{
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1163
#ifdef SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1164
    OBJ newFloat;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1165
    float128_t result, myVal, argVal;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1166
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1167
    myVal = __quadFloatVal(self);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1168
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1169
    result = STX_divq(argVal, myVal);
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1170
    __qMKQFLOAT(newFloat, result);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1171
    RETURN ( newFloat );
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1172
#endif // SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1173
%}.
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1174
    self errorUnsupported
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1175
!
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1176
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1177
sumFromQuadFloat:aQuadFloat
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1178
    "sent when aQuadFloat does not know how to add the receiver, self"
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1179
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1180
%{
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1181
#ifdef SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1182
    OBJ newFloat;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1183
    float128_t result, myVal, argVal;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1184
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1185
    myVal = __quadFloatVal(self);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1186
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1187
    result = STX_addq( myVal, argVal, 0 );
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1188
    __qMKQFLOAT(newFloat, result);
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1189
    RETURN ( newFloat );
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1190
#endif // SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1191
%}.
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1192
    self errorUnsupported
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1193
! !
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1194
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1195
!QuadFloat methodsFor:'error reportng'!
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1196
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1197
errorUnsupported
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1198
    self class errorUnsupported
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1199
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1200
    "Modified: / 07-06-2019 / 02:44:51 / Claus Gittinger"
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1201
! !
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1202
5025
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1203
!QuadFloat methodsFor:'printing'!
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1204
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1205
printOn:aStream
5269
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1206
    |mantissa exponent|
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1207
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1208
    mantissa := self mantissa.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1209
    exponent := self exponent.
5027
49e378bf72b7 leftover debug prints
Claus Gittinger <cg@exept.de>
parents: 5025
diff changeset
  1210
5269
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1211
    self exponent == 0 ifTrue:[
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1212
	mantissa printOn:aStream.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1213
	aStream nextPutAll:'.0'.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1214
	^ self
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1215
    ].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1216
    mantissa == 0 ifTrue:[
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1217
	"/ a zero mantissa is impossible - except for zero and a few others
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1218
	exponent == 0 ifTrue:[ aStream nextPutAll:'0.0'. ^ self].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1219
	self == NaN ifTrue:[ aStream nextPutAll:'NAN'. ^ self ].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1220
	self == NegativeInfinity ifTrue:[ aStream nextPutAll:'-INF'. ^ self].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1221
	self == PositiveInfinity ifTrue:[ aStream nextPutAll:'INF'. ^ self].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1222
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1223
	self error:'invalid largeFloat' mayProceed:true.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1224
	aStream nextPutAll:'Invalid'. ^ self.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1225
    ].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1226
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1227
    exponent >= 0 ifTrue:[
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1228
	(mantissa bitShift:exponent) printOn:aStream.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1229
	aStream nextPutAll:'.0'.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1230
	^ self
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1231
    ].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1232
    ((mantissa / (1 bitShift:exponent negated)) asFixedPoint:6) printOn:aStream.
5025
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1233
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1234
    "Created: / 11-06-2019 / 00:13:00 / Claus Gittinger"
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1235
! !
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1236
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1237
!QuadFloat methodsFor:'queries'!
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1238
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1239
isFinite
5194
b4f517f893f1 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5075
diff changeset
  1240
    "return true, if the receiver is a finite float (not NaN and not +/-INF)"
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1241
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1242
%{  /* NOCONTEXT */
5016
fe5e7a43b7f0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5014
diff changeset
  1243
#ifdef SUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1244
    float128_t myVal;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1245
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1246
    myVal = __quadFloatVal(self);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1247
    RETURN (STX_isfiniteq(myVal) ? true : false);
5016
fe5e7a43b7f0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5014
diff changeset
  1248
#endif // SUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1249
%}.
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1250
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1251
    "
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1252
	1.0 isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1253
	self NaN isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1254
	self infinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1255
	self negativeInfinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1256
	(0.0 uncheckedDivide: 0.0) isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1257
	(1.0 uncheckedDivide: 0.0) isFinite
5020
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1258
    "
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1259
!
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1260
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1261
isInfinite
5194
b4f517f893f1 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5075
diff changeset
  1262
    "return true, if the receiver is an infinite float (+Inf or -Inf)."
5020
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1263
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1264
%{  /* NOCONTEXT */
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1265
#ifdef SUPPORT_QUADFLOAT
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1266
    float128_t myVal;
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1267
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1268
    myVal = __quadFloatVal(self);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1269
    RETURN (STX_isInfq(&myVal) ? true : false);
5020
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1270
#endif // SUPPORT_QUADFLOAT
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1271
%}.
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1272
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1273
    "
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1274
	1.0 asQuadFloat isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1275
	1.0 asQuadFloat isInfinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1276
	self NaN isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1277
	self NaN isInfinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1278
	self infinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1279
	self infinity isInfinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1280
	self negativeInfinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1281
	self negativeInfinity isInfinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1282
	(0.0 uncheckedDivide: 0.0) isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1283
	(1.0 uncheckedDivide: 0.0) isFinite
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1284
    "
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1285
!
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1286
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1287
isNaN
5194
b4f517f893f1 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5075
diff changeset
  1288
    "return true, if the receiver is an invalid float (NaN - not a number).
b4f517f893f1 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5075
diff changeset
  1289
     These are not created by ST/X float operations (they raise an exception);
b4f517f893f1 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5075
diff changeset
  1290
     however, inline C-code could produce them."
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1291
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1292
%{  /* NOCONTEXT */
5016
fe5e7a43b7f0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5014
diff changeset
  1293
#ifdef SUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1294
    float128_t myVal;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1295
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1296
    myVal = __quadFloatVal(self);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1297
    RETURN (STX_isNanq(&myVal) ? true : false);
5016
fe5e7a43b7f0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5014
diff changeset
  1298
#endif // SUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1299
%}.
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1300
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1301
    "
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1302
	1.0 asQuadFloat isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1303
	self NaN isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1304
	self infinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1305
	(0.0 uncheckedDivide: 0.0) isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1306
	(1.0 uncheckedDivide: 0.0) isFinite
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1307
    "
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1308
! !
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1309
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1310
!QuadFloat methodsFor:'testing'!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1311
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1312
isQuadFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1313
    "return true, if the receiver is some kind of quad floating point number (iee quad precision)"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1314
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1315
    ^ true
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1316
! !
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1317
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1318
!QuadFloat class methodsFor:'documentation'!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1319
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1320
version_CVS
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1321
    ^ '$Header$'
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1322
! !