QuadFloat.st
author Claus Gittinger <cg@exept.de>
Sun, 01 Dec 2019 05:26:20 +0100
changeset 5328 f1d46108f6f8
parent 5295 9ddaf6f44007
child 5337 390df14ceffd
permissions -rw-r--r--
#FEATURE by exept class: QuadFloat added: #asIEEEFloat class: QuadFloat class comment/format in: #coerce: #numBitsInMantissa
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)) {
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   188
        double f = __floatVal(aFloat);
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   189
        float128_t qf;
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   190
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   191
        qf = STX_dbltoq (f);
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   192
        __qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
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:[
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   199
        self errorUnsupported.
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   200
        ^ aFloat asLongFloat
4993
c7956a3ab780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4992
diff changeset
   201
    ].
4997
55c76587b49c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4994
diff changeset
   202
    ArgumentError raise
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
    "
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
     QuadFloat fromFloat:123.0
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
     123.0 asQuadFloat
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
     123 asQuadFloat
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    "
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
    "Created: / 06-06-2019 / 18:01:03 / Claus Gittinger"
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   211
!
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   212
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   213
fromInteger:anInteger
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   214
    "return a new quadFloat, given an integer value"
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   215
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   216
%{  /* NOCONTEXT */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   217
#ifdef SUPPORT_QUADFLOAT
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   218
    OBJ newFloat;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   219
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   220
    if (__isSmallInteger(anInteger)) {
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   221
	INT iVal = __intVal(anInteger);
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   222
	float128_t qf;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   223
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   224
	qf = STX_inttoq( (long)iVal );
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   225
	__qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   226
	RETURN (newFloat);
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   227
    }
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   228
#endif /* SUPPORT_QUADFLOAT */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   229
%}.
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   230
    ^ super fromInteger:anInteger
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
    "
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   233
     QuadFloat fromInteger:123
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   234
     123 asQuadFloat
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
!
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   237
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   238
fromLongFloat:aFloat
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   239
    "return a new quadFloat, given a long float value"
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   240
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   241
%{  /* NOCONTEXT */
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   242
#ifdef xSUPPORT_QUADFLOAT
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   243
    OBJ newFloat;
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   244
    union {
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   245
        LONGFLOAT_t lf;         // is long double
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   246
        extFloat80_t ef;        // is 80bit ext
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   247
        float128_t qf;          // is 128bit quad
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   248
    } u;
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   249
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   250
    if (__isLongFloat(aFloat)) {
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   251
        u.lf = __longFloatVal(aFloat);
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   252
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   253
        if (sizeof(LONGFLOAT_t) == 16) {
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   254
            // longFloat is already 128 bits in size (sparc)
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   255
            __qMKQFLOAT(newFloat, u.qf);   /* OBJECT ALLOCATION */
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   256
            RETURN (newFloat);
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   257
        }
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   258
        if (sizeof(LONGFLOAT_t) < 16) {
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   259
            // assume 80bit extended float format (amd64, x86_64)
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   260
            u.qf = extF80_to_f128( u.ef);
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   261
            __qMKQFLOAT(newFloat, u.qf);   /* OBJECT ALLOCATION */
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   262
            RETURN (newFloat);
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   263
        }
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   264
        // fall into error case
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   265
    }
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   266
#endif /* SUPPORT_QUADFLOAT */
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   267
%}.
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   268
    aFloat isLongFloat ifTrue:[
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   269
        self errorUnsupported.
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   270
        ^ aFloat asLongFloat
5014
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
    ArgumentError raise
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   273
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
     QuadFloat fromLongFloat:123.0 asLongFloat
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   276
    "
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   277
!
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   278
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   279
fromShortFloat:aShortFloat
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   280
    "return a new quadFloat, given a float value"
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   281
5013
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   282
    ^ self fromFloat:(aShortFloat asFloat)
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   283
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
     QuadFloat fromShortFloat:123.0 asShortFloat
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   286
    "
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   287
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   288
    "Created: / 08-06-2019 / 03:28:37 / Claus Gittinger"
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
! !
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
!QuadFloat class methodsFor:'coercing & converting'!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
coerce:aNumber
5328
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
   294
    "convert the argument aNumber into an instance of the receiver (class) and return it."
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
    ^ aNumber asQuadFloat.
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
    "Created: / 06-06-2019 / 16:51:01 / Claus Gittinger"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
! !
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
!QuadFloat class methodsFor:'constants'!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
NaN
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   304
    "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
   305
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   306
    |nan|
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
    NaN isNil ifTrue:[
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   309
%{  /* NOCONTEXT */
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   310
#ifdef xSUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   311
	{
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   312
	    OBJ newFloat;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   313
	    float128_t qf;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   314
5014
eb02b6118108 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5013
diff changeset
   315
	    softfloat_commonNaNToF128M( (uint32_t*)(&qf) );
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   316
	    __qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   317
	    nan = newFloat;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   318
	}
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   319
#endif /* SUPPORT_QUADFLOAT */
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   320
%}.
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   321
	nan isNil ifTrue:[
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   322
	    self errorUnsupported
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   323
	].
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   324
	NaN := nan
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
    ].
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
    ^ NaN
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
e
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
    "return the constant e as quadFloat"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
    E isNil ifTrue:[
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   333
	"/ eDigits has enough digits for 128bit IEEE quads
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   334
	"/ 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
   335
	E  := self readFrom:(Number eDigits)
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
    ].
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
    ^ E
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
    "Created: / 06-06-2019 / 17:01:54 / Claus Gittinger"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   342
infinity
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   343
    "return a quadFloat which represents +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
    |inf|
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   346
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   347
    PositiveInfinity isNil ifTrue:[
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   348
%{  /* NOCONTEXT */
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   349
#ifdef xSUPPORT_QUADFLOAT
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   350
	{
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   351
	    OBJ newFloat;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   352
	    struct uint128 uiZ;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   353
	    union ui128_f128 uZ;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   354
	    float128_t qf;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   355
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   356
	    uiZ.v64 = packToF128UI64( 0, 0x7FFF, 0 );
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   357
	    uiZ.v0 = 0;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   358
	    uZ.ui = uiZ;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   359
	    qf = uZ.f;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   360
	    __qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   361
	    inf = newFloat;
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   362
	}
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   363
#endif /* SUPPORT_QUADFLOAT */
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   364
%}.
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   365
	inf isNil ifTrue:[
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   366
	    self errorUnsupported
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   367
	].
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   368
	PositiveInfinity := inf
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
    ^ PositiveInfinity
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
    "Created: / 08-06-2019 / 14:05:26 / Claus Gittinger"
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   373
!
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   374
5012
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   375
negativeInfinity
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   376
    "return a quadFloat which represents -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
    |inf|
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   379
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   380
    NegativeInfinity isNil ifTrue:[
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   381
%{  /* NOCONTEXT */
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   382
#ifdef xSUPPORT_QUADFLOAT
5013
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   383
	{
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   384
	    OBJ newFloat;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   385
	    struct uint128 uiZ;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   386
	    union ui128_f128 uZ;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   387
	    float128_t qf;
5012
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   388
5013
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   389
	    uiZ.v64 = packToF128UI64( 1, 0x7FFF, 0 );
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   390
	    uiZ.v0 = 0;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   391
	    uZ.ui = uiZ;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   392
	    qf = uZ.f;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   393
	    __qMKQFLOAT(newFloat, qf);   /* OBJECT ALLOCATION */
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   394
	    inf = newFloat;
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   395
	}
5012
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   396
#endif /* SUPPORT_QUADFLOAT */
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   397
%}.
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   398
	inf isNil ifTrue:[
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   399
	    self errorUnsupported
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   400
	].
5013
00262ae1cef1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5012
diff changeset
   401
	NegativeInfinity := inf
5012
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
    ^ NegativeInfinity
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
    "Created: / 08-06-2019 / 14:05:50 / Claus Gittinger"
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   406
!
bd4e0475f9ea #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5011
diff changeset
   407
5264
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   408
phi
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   409
    "return the constant phi as quadFloat"
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   410
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   411
    Phi isNil ifTrue:[
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   412
	"/ phiDigits has enough digits for 128bit IEEE quads
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   413
	"/ 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
   414
	Phi  := self readFrom:(Number phiDigits)
5264
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
    ^ Phi
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   417
!
e01656e04937 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5194
diff changeset
   418
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
pi
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
    "return the constant pi as quadFloat"
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
    Pi isNil ifTrue:[
4991
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   423
	"/ piDigits has enough digits for 128bit IEEE quads
9d86d1eb2a65 compilable, at least
Claus Gittinger <cg@exept.de>
parents: 4983
diff changeset
   424
	"/ 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
   425
	Pi  := self readFrom:(Number piDigits)
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
    ].
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
    ^ Pi
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
    "Created: / 06-06-2019 / 17:09:51 / Claus Gittinger"
5006
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   430
!
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   431
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   432
unity
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   433
    "return the neutral element for multiplication (1.0) as QuadFloat"
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   434
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   435
    QuadFloatOne isNil ifTrue:[
5007
97def4a232e9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5006
diff changeset
   436
	QuadFloatOne := 1.0 asQuadFloat.
5006
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
    ^ QuadFloatOne
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   439
be75f4702e37 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5005
diff changeset
   440
    "Created: / 07-06-2019 / 03:26:38 / Claus Gittinger"
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   441
!
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   442
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   443
zero
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   444
    "return the neutral element for addition (0.0) as QuadFloat"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   445
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   446
    QuadFloatZero isNil ifTrue:[
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
   447
	QuadFloatZero := 0.0 asQuadFloat
5008
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
    ^ QuadFloatZero
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   450
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   451
    "Created: / 07-06-2019 / 09:22:56 / Claus Gittinger"
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
! !
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
   454
!QuadFloat class methodsFor:'error reportng'!
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   455
4997
55c76587b49c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4994
diff changeset
   456
errorUnsupported
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   457
    "you may proceed from this error, to get a long float number result 
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   458
     (of course, with less than expected precision)"
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   459
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   460
    self errorUnsupported:'QuadFloats not supported on this patform'
4997
55c76587b49c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4994
diff changeset
   461
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
   462
    "Created: / 07-06-2019 / 02:44:39 / Claus Gittinger"
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   463
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   464
    "
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   465
     UnimplementedFunctionalityError handle:[:ex |
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   466
         ex proceed
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   467
     ] do:[
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   468
         1.0 asQuadFloat
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   469
     ]. 
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
   470
    "
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   471
! !
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   472
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   473
!QuadFloat class methodsFor:'queries'!
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   474
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   475
epsilon
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   476
    "return the maximum relative spacing of instances of mySelf
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   477
     (i.e. the value-delta of the least significant bit)"
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   478
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   479
    Epsilon isNil ifTrue:[
5020
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
   480
	Epsilon := self computeEpsilon.
5017
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   481
    ].
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   482
    ^ Epsilon
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   483
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   484
    "
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   485
     self epsilon
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   486
    "
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   487
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   488
    "Created: / 10-06-2019 / 21:21:18 / Claus Gittinger"
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   489
!
47f09d7ee9b1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5016
diff changeset
   490
5018
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   491
exponentCharacter
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   492
    "return the character used to print between mantissa an exponent.
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   493
     Also used by the scanner when reading numbers."
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   494
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   495
    ^ $Q
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   496
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   497
    "Created: / 10-06-2019 / 21:28:04 / Claus Gittinger"
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   498
!
ce2e00107844 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5017
diff changeset
   499
5025
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   500
numBitsInExponent
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   501
    "answer the number of bits in the exponent.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   502
     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
   503
	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
   504
    "
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   505
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   506
    ^ 15
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   507
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   508
    "
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   509
     1.0 class numBitsInExponent -> 11
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   510
     1.0 asShortFloat class numBitsInExponent -> 8
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   511
     1.0 asLongFloat class numBitsInExponent -> 15
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   512
     1.0 asQuadFloat class numBitsInExponent -> 15
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   513
    "
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   514
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   515
    "Created: / 11-06-2019 / 00:14:55 / Claus Gittinger"
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   516
!
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   517
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   518
numBitsInMantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   519
    "answer the number of bits in the mantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   520
     the hidden bit is not counted here:
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   521
5328
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
   522
     This is an 128bit quadfloat, where 112 bits are available in the mantissa:
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
   523
        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
   524
    "
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   525
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   526
    ^ 112
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   527
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   528
    "
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   529
     1.0 class numBitsInMantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   530
     1.0 asShortFloat class numBitsInMantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   531
     1.0 asLongFloat class numBitsInMantissa
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   532
     1.0 asQuadFloat class numBitsInMantissa
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
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   535
    "Created: / 07-06-2019 / 03:24:20 / Claus Gittinger"
5056
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   536
!
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   537
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   538
radix
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   539
    "answer the radix of a QuadFloat's exponent
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   540
     This is an IEEE float, which is represented as binary"
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   541
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   542
    ^ 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
   543
0744a9b601c5 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5027
diff changeset
   544
    "Created: / 19-07-2019 / 17:28:00 / Claus Gittinger"
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   545
! !
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
   546
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   547
!QuadFloat methodsFor:'arithmetic'!
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   548
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   549
* aNumber
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   550
    "return the product of the receiver and the argument."
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   551
5074
7eaede72d204 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5056
diff changeset
   552
    aNumber class == QuadFloat ifTrue:[
5291
9ee8ce66a95f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5290
diff changeset
   553
        ^ aNumber productFromQuadFloat:self
5074
7eaede72d204 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5056
diff changeset
   554
    ].
5291
9ee8ce66a95f #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5290
diff changeset
   555
    "/ DEBUGGING
5075
18cba5cb7d94 #BUGFIX by exept
Claus Gittinger <cg@exept.de>
parents: 5074
diff changeset
   556
    thisContext isReallyRecursive ifTrue:[self error].
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   557
    ^ aNumber productFromQuadFloat: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 sum 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 sumFromQuadFloat:self
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
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   566
- aNumber
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   567
    "return the difference of the receiver and the argument, aNumber"
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 differenceFromQuadFloat: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
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   572
/ aNumber
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   573
    "return the quotient of the receiver and the argument, aNumber"
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   574
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   575
    aNumber isZero ifTrue:[
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   576
	"
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   577
	 No, you shalt not divide by zero
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   578
	"
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   579
	^ ZeroDivide raiseRequestWith:thisContext.
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   580
    ].
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   581
    ^ aNumber quotientFromQuadFloat:self
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   582
!
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   583
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   584
abs
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   585
    "return the absolute value of the receiver
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   586
     reimplemented here for speed"
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   589
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   590
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   591
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   592
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   593
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   594
    result = STX_absq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   595
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   596
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   597
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   598
%}.
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
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   601
ceiling
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   602
    "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
   603
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   604
    |val|
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   605
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   606
%{
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   607
#ifdef SUPPORT_QUADFLOAT
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   608
    float128_t qVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   609
    float128_t qMinInt;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   610
    float128_t qMaxInt;
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
    qVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   613
    qVal = STX_ceilq(qVal);
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
    qMinInt = STX_dbltoq((double)_MIN_INT);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   616
    qMaxInt = STX_dbltoq((double)_MAX_INT);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   617
    if (STX_geq(qVal, qMinInt) && STX_leq(qVal, qMaxInt)) {
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   618
	double dVal = STX_qtodbl(qVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   619
	RETURN ( __mkSmallInteger( (INT) dVal ) );
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
    __qMKQFLOAT(val, qVal);
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   622
#endif
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   623
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   624
    ^ val asInteger
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   625
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   626
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   627
     0.5 asQuadFloat ceiling
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   628
     0.5 asQuadFloat ceilingAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   629
     -0.5 asQuadFloat ceiling
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   630
     -0.5 asQuadFloat ceilingAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   631
    "
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
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   634
ceilingAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   635
    "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
   636
     This is much like #ceiling, but avoids a (possibly expensive) conversion
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   637
     of the result to an integer.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   638
     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
   639
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   640
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   641
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   642
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   643
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   644
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   645
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   646
    result = STX_ceilq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   647
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   648
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   649
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   650
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   651
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   652
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   653
cos
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   654
    "return the cosine of the receiver (interpreted as radians)"
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   657
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   658
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   659
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   660
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   661
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   662
    result = STX_cosq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   663
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   664
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   665
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   666
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   667
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   668
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   669
cosh
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   670
    "return the hyperbolic cosine of the receiver (interpreted as radians)"
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   673
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   674
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   675
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   676
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   677
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   678
    result = STX_coshq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   679
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   680
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   681
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   682
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   683
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   684
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   685
exp
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   686
    "return e raised to the power of the receiver"
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   689
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   690
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   691
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   692
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   693
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   694
    result = STX_expq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   695
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   696
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   697
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   698
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   699
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   700
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   701
exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   702
    "extract a normalized float's (unbiased) exponent.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   703
     The returned value depends on the float-representation of
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   704
     the underlying machine and is therefore highly unportable.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   705
     This is not for general use.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   706
     This assumes that the mantissa is normalized to
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   707
     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
   708
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   709
%{  /* NOCONTEXT */
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   710
#ifdef SUPPORT_QUADFLOAT
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   711
    float128_t myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   712
    float128_t frac;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   713
    int exp;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   714
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   715
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   716
#if 1
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   717
    // should we?
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   718
    if (! (STX_isNanq(&myVal) || STX_isInfq(&myVal)))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   719
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   720
    {
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   721
	frac = STX_frexpq(myVal, &exp);
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   722
	RETURN (__mkSmallInteger(exp));
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   723
    }
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   724
#endif
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   725
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   726
    ^ super exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   727
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   728
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   729
     1.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   730
     1.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   731
     2.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   732
     2.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   733
     3.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   734
     3.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   735
     4.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   736
     4.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   737
     0.5 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   738
     0.5 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   739
     0.4 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   740
     0.4 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   741
     0.25 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   742
     0.25 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   743
     0.2 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   744
     0.2 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   745
     0.00000011111 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   746
     0.00000011111 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   747
     0.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   748
     0.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   749
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   750
     1e1000 exponent -> error (INF)
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   751
     1e1000 asQuadFloat exponent -> error (INF)
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   752
    "
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
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   755
floor
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   756
    "return the integer nearest the receiver towards negative infinity."
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   757
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   758
    |val|
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   759
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   760
%{
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   761
#ifdef SUPPORT_QUADFLOAT
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   762
    float128_t qVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   763
    float128_t qMinInt;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   764
    float128_t qMaxInt;
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
    qVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   767
    qVal = STX_floorq(qVal);
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
    qMinInt = STX_dbltoq((double)_MIN_INT);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   770
    qMaxInt = STX_dbltoq((double)_MAX_INT);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   771
    if (STX_geq(qVal, qMinInt) && STX_leq(qVal, qMaxInt)) {
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   772
	double dVal = STX_qtodbl(qVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   773
	RETURN ( __mkSmallInteger( (INT) dVal ) );
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
    __qMKQFLOAT(val, qVal);
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   776
#endif
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   777
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   778
    ^ val asInteger
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   779
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   780
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   781
     0.5 asQuadFloat floor
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   782
     0.5 asQuadFloat floorAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   783
     -0.5 asQuadFloat floor
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   784
     -0.5 asQuadFloat floorAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   785
    "
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
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   788
floorAsFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   789
    "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
   790
     This is much like #floor, but avoids a (possibly expensive) conversion
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   791
     of the result to an integer.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   792
     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
   793
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   794
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   795
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   796
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   797
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   798
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   799
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   800
    result = STX_floorq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   801
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   802
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   803
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   804
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   805
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   806
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   807
ln
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   808
    "return natural logarithm of the receiver."
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   811
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   812
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   813
    float128_t result, myVal;
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
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   816
    result = STX_logq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   817
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   818
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   819
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   820
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   821
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   822
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   823
log
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   824
    "return log base 10 of the receiver.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   825
     Alias for log:10."
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   828
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   829
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   830
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   831
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   832
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   833
    result = STX_log10q(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   834
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   835
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   836
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   837
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   838
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   839
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   840
log2
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   841
    "return logarithm dualis of the receiver."
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   844
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   845
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   846
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   847
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   848
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   849
    result = STX_log2q(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   850
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   851
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   852
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   853
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   854
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   855
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   856
mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   857
    "extract a normalized float's mantissa.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   858
     The returned value depends on the float-representation of
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   859
     the underlying machine and is therefore highly unportable.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   860
     This is not for general use.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   861
     This assumes that the mantissa is normalized to
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   862
     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
   863
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   864
%{  /* NOCONTEXT */
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   865
#ifdef SUPPORT_QUADFLOAT
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   866
    float128_t myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   867
    float128_t frac;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   868
    int exp;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   869
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   870
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   871
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   872
    // ouch: math libs seem to not care for NaN here;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   873
#if 1
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   874
    // should we?
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   875
    if (! (STX_isNanq(&myVal) || STX_isInfq(&myVal)))
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   876
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   877
    {
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   878
	frac = STX_frexpq(myVal, &exp);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   879
	__qMKQFLOAT(newFloat, frac);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   880
	RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   881
    }
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
   882
#endif
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   883
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   884
    ^ super mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   885
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   886
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   887
     1.0 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   888
     1.0 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   889
     1.0 mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   890
     1.0 asQuadFloat mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   891
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   892
     0.25 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   893
     0.25 asQuadFloat exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   894
     0.25 mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   895
     0.25 asQuadFloat mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   896
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   897
     0.00000011111 exponent
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   898
     0.00000011111 mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   899
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   900
     1e1000 mantissa
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   901
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   902
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   903
    "Modified: / 20-06-2017 / 11:37:13 / cg"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   904
    "Modified (comment): / 26-05-2019 / 03:12:55 / Claus Gittinger"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   905
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   906
5021
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   907
negated
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   908
    "return the receiver negated"
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   909
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   910
%{  /* NOCONTEXT */
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   911
#ifdef SUPPORT_QUADFLOAT
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   912
    OBJ newFloat;
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   913
    float128_t result, myVal;
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   914
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   915
    myVal = __quadFloatVal(self);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   916
    result = STX_negq(myVal);
5021
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   917
    __qMKQFLOAT(newFloat, result);
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   918
    RETURN ( newFloat );
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   919
#endif
073ff185359b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5020
diff changeset
   920
%}.
5025
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   921
!
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   922
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   923
rem: aNumber
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   924
    "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
   925
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   926
    aNumber isZero ifTrue:[
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   927
	"
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   928
	 No, you shalt not divide by zero
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   929
	"
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   930
	^ ZeroDivide raiseRequestWith:thisContext.
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   931
    ].
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
   932
    ^ aNumber remainderFromLongFloat:self
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   933
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   934
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   935
sin
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   936
    "return the sine of the receiver (interpreted as radians)"
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   939
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   940
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   941
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   942
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   943
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   944
    result = STX_sinq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   945
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   946
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   947
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   948
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   949
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   950
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   951
sinh
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   952
    "return the hyperbolic sine of the receiver (interpreted as radians)"
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   955
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   956
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   957
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   958
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   959
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   960
    result = STX_sinhq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   961
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   962
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   963
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   964
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   965
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   966
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   967
tan
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   968
    "return the tangent of the receiver (interpreted as radians)"
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   971
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   972
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   973
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   974
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   975
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   976
    result = STX_tanq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   977
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   978
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   979
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   980
%}.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   981
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   982
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   983
tanh
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   984
    "return the hyperbolic tangent of the receiver (interpreted as radians)"
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   985
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   986
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   987
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   988
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   989
    float128_t result, myVal;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   990
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   991
    myVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   992
    result = STX_tanhq(myVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   993
    __qMKQFLOAT(newFloat, result);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   994
    RETURN ( newFloat );
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   995
#endif
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
   996
%}.
4994
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   997
! !
246159e1784d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4993
diff changeset
   998
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
   999
!QuadFloat methodsFor:'coercing & converting'!
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1000
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1001
asFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1002
    "return a Float with same value as the receiver.
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1003
     Raises an error if the receiver exceeds the float range."
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
%{  /* NOCONTEXT */
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1006
#ifdef SUPPORT_QUADFLOAT
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1007
    OBJ newFloat;
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1008
    float128_t qVal = __quadFloatVal(self);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1009
    double dVal = STX_qtodbl(qVal);
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1010
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1011
    if (isfinite(dVal) || !STX_isfiniteq(qVal)) {
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1012
	__qMKFLOAT(newFloat, dVal);
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1013
	RETURN ( newFloat );
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1014
    }
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1015
#endif
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
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1018
     value out of range
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1019
     if you need -INF for a zero receiver, try Number trapInfinity:[...]
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1020
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1021
    ^ self class
5287
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1022
	raise:#infiniteResultSignal
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1023
	receiver:self
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1024
	selector:#asFloat
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1025
	arguments:#()
16a42e9d5748 disabled (for now)
Claus Gittinger <cg@exept.de>
parents: 5276
diff changeset
  1026
	errorString:'receiver is out of the double-precision float range'
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1027
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1028
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1029
     1.0 asQuadFloat asFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1030
    "
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1031
!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1032
5328
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1033
asIEEEFloat
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1034
    "return an IEEE soft float with same value as receiver"
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1035
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1036
    ^ IEEEFloat fromFloat:self
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1037
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1038
    "
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1039
     123 asFloat asIEEEFloat
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1040
     0 asShortFloat asIEEEFloat
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1041
     0 asLongFloat asIEEEFloat
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1042
     0 asQuadFloat asIEEEFloat
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1043
     0.0 asIEEEFloat
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1044
    "
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1045
!
f1d46108f6f8 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 5295
diff changeset
  1046
5295
9ddaf6f44007 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5291
diff changeset
  1047
asQuadFloat
9ddaf6f44007 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5291
diff changeset
  1048
    ^ self
9ddaf6f44007 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5291
diff changeset
  1049
9ddaf6f44007 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5291
diff changeset
  1050
    "
9ddaf6f44007 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5291
diff changeset
  1051
     1.0 asQuadFloat asQuadFloat
9ddaf6f44007 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5291
diff changeset
  1052
    "
9ddaf6f44007 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5291
diff changeset
  1053
!
9ddaf6f44007 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 5291
diff changeset
  1054
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1055
generality
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1056
    "return the generality value - see ArithmeticValue>>retry:coercing:"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1057
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1058
    ^ 93
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1059
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1060
    "Created: / 07-06-2019 / 09:30:58 / Claus Gittinger"
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
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1063
!QuadFloat methodsFor:'comparing'!
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
< aNumber
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1066
    "return true, if the argument is greater"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1067
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1068
    ^ aNumber lessFromQuadFloat:self
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1069
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1070
    "Created: / 07-06-2019 / 09:25:47 / Claus Gittinger"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1071
!
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1072
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1073
= aNumber
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1074
    "return true, if the argument represents the same numeric value
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1075
     as the receiver, false otherwise"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1076
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1077
    ^ aNumber equalFromQuadFloat:self
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1078
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1079
    "Created: / 07-06-2019 / 09:25:27 / Claus Gittinger"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1080
!
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1081
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1082
hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1083
    "return a number for hashing; redefined, since floats compare
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1084
     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
  1085
     as 3 hash."
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1086
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1087
    |i|
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1088
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1089
    (self >= SmallInteger minVal and:[self <= SmallInteger maxVal]) ifTrue:[
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1090
	i := self asInteger.
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1091
	self = i ifTrue:[
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1092
	    ^ i hash
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1093
	].
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1094
    ].
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1095
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1096
    ^ self asFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1097
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1098
    "
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1099
     1.2345 hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1100
     1.2345 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1101
     1.2345 asLongFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1102
     1.2345 asQuadFloat hash
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1103
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1104
     1.0 hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1105
     1.0 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1106
     1.0 asLongFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1107
     1.0 asQuadFloat hash
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1108
5008
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1109
     0.5 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1110
     0.5 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1111
     0.5 asLongFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1112
     0.5 asQuadFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1113
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1114
     0.25 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1115
     0.25 asShortFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1116
     0.25 asLongFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1117
     0.25 asQuadFloat hash
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1118
    "
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1119
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1120
    "Created: / 07-06-2019 / 09:28:07 / Claus Gittinger"
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1121
! !
9eb7df4b6ce0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5007
diff changeset
  1122
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1123
!QuadFloat methodsFor:'double dispatching'!
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1124
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1125
differenceFromQuadFloat:aQuadFloat
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1126
%{
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1127
#ifdef SUPPORT_QUADFLOAT
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1128
    OBJ newFloat;
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1129
    float128_t result, myVal, argVal;
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1130
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1131
    myVal = __quadFloatVal(self);
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1132
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1133
    result = STX_addq( argVal, myVal, 1 );
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1134
    __qMKQFLOAT(newFloat, result);
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1135
    RETURN ( newFloat );
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1136
#endif // SUPPORT_QUADFLOAT
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1137
%}.
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1138
    self errorUnsupported
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1139
!
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1140
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1141
equalFromQuadFloat:aQuadFloat
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1142
    "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
  1143
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1144
%{
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1145
#ifdef SUPPORT_QUADFLOAT
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1146
    OBJ newFloat;
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1147
    float128_t result, myVal, argVal;
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1148
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1149
    myVal = __quadFloatVal(self);
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1150
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1151
    RETURN (STX_eqq(argVal, myVal) ? true : false);
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1152
#endif // SUPPORT_QUADFLOAT
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1153
%}.
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1154
    self errorUnsupported
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1155
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1156
    "Modified: / 08-06-2019 / 13:31:48 / Claus Gittinger"
5004
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
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1159
lessFromQuadFloat:aQuadFloat
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1160
    "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
  1161
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1162
%{
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1163
#ifdef SUPPORT_QUADFLOAT
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1164
    OBJ newFloat;
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1165
    float128_t result, myVal, argVal;
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1166
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1167
    myVal = __quadFloatVal(self);
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1168
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1169
    RETURN (STX_ltq(argVal, myVal) ? true : false);
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1170
#endif // SUPPORT_QUADFLOAT
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1171
%}.
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1172
    self errorUnsupported
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1173
!
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1174
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1175
productFromQuadFloat:aQuadFloat
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1176
    "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
  1177
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1178
%{
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1179
#ifdef SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1180
    OBJ newFloat;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1181
    float128_t result, myVal, argVal;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1182
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1183
    myVal = __quadFloatVal(self);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1184
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1185
    result = STX_mulq(myVal, argVal);
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1186
    __qMKQFLOAT(newFloat, result);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1187
    RETURN ( newFloat );
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1188
#endif // SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1189
%}.
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1190
    self errorUnsupported
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
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1193
quotientFromQuadFloat:aQuadFloat
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1194
    "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
  1195
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1196
%{
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1197
#ifdef SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1198
    OBJ newFloat;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1199
    float128_t result, myVal, argVal;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1200
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1201
    myVal = __quadFloatVal(self);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1202
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1203
    result = STX_divq(argVal, myVal);
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1204
    __qMKQFLOAT(newFloat, result);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1205
    RETURN ( newFloat );
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1206
#endif // SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1207
%}.
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1208
    self errorUnsupported
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1209
!
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1210
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1211
sumFromQuadFloat:aQuadFloat
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1212
    "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
  1213
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1214
%{
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1215
#ifdef SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1216
    OBJ newFloat;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1217
    float128_t result, myVal, argVal;
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1218
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1219
    myVal = __quadFloatVal(self);
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1220
    argVal = __quadFloatVal(aQuadFloat);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1221
    result = STX_addq( myVal, argVal, 0 );
5005
37632dff5141 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5004
diff changeset
  1222
    __qMKQFLOAT(newFloat, result);
5004
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1223
    RETURN ( newFloat );
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1224
#endif // SUPPORT_QUADFLOAT
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1225
%}.
52b4d47d9ea4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5003
diff changeset
  1226
    self errorUnsupported
5003
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1227
! !
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1228
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1229
!QuadFloat methodsFor:'error reportng'!
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1230
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1231
errorUnsupported
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1232
    self class errorUnsupported
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1233
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1234
    "Modified: / 07-06-2019 / 02:44:51 / Claus Gittinger"
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1235
! !
7a48121b7faa #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 5002
diff changeset
  1236
5025
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1237
!QuadFloat methodsFor:'printing'!
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1238
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1239
printOn:aStream
5269
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1240
    |mantissa exponent|
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1241
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1242
    mantissa := self mantissa.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1243
    exponent := self exponent.
5027
49e378bf72b7 leftover debug prints
Claus Gittinger <cg@exept.de>
parents: 5025
diff changeset
  1244
5269
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1245
    self exponent == 0 ifTrue:[
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1246
	mantissa printOn:aStream.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1247
	aStream nextPutAll:'.0'.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1248
	^ self
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1249
    ].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1250
    mantissa == 0 ifTrue:[
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1251
	"/ 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
  1252
	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
  1253
	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
  1254
	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
  1255
	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
  1256
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1257
	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
  1258
	aStream nextPutAll:'Invalid'. ^ self.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1259
    ].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1260
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1261
    exponent >= 0 ifTrue:[
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1262
	(mantissa bitShift:exponent) printOn:aStream.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1263
	aStream nextPutAll:'.0'.
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1264
	^ self
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1265
    ].
83163a7005f1 Fallback to version 1.36 - mingw couldn't compile
Stefan Vogel <sv@exept.de>
parents: 5268
diff changeset
  1266
    ((mantissa / (1 bitShift:exponent negated)) asFixedPoint:6) printOn:aStream.
5025
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1267
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1268
    "Created: / 11-06-2019 / 00:13:00 / Claus Gittinger"
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1269
! !
b1d9b71d6937 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5024
diff changeset
  1270
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1271
!QuadFloat methodsFor:'queries'!
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1272
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1273
isFinite
5194
b4f517f893f1 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5075
diff changeset
  1274
    "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
  1275
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1276
%{  /* NOCONTEXT */
5016
fe5e7a43b7f0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5014
diff changeset
  1277
#ifdef SUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1278
    float128_t myVal;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1279
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1280
    myVal = __quadFloatVal(self);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1281
    RETURN (STX_isfiniteq(myVal) ? true : false);
5016
fe5e7a43b7f0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5014
diff changeset
  1282
#endif // SUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1283
%}.
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
    "
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1286
	1.0 isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1287
	self NaN isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1288
	self infinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1289
	self negativeInfinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1290
	(0.0 uncheckedDivide: 0.0) isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1291
	(1.0 uncheckedDivide: 0.0) isFinite
5020
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1292
    "
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1293
!
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1294
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1295
isInfinite
5194
b4f517f893f1 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5075
diff changeset
  1296
    "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
  1297
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1298
%{  /* NOCONTEXT */
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1299
#ifdef SUPPORT_QUADFLOAT
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1300
    float128_t myVal;
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1301
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1302
    myVal = __quadFloatVal(self);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1303
    RETURN (STX_isInfq(&myVal) ? true : false);
5020
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1304
#endif // SUPPORT_QUADFLOAT
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1305
%}.
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1306
9d9c46a3c1b1 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5019
diff changeset
  1307
    "
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1308
	1.0 asQuadFloat isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1309
	1.0 asQuadFloat isInfinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1310
	self NaN isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1311
	self NaN isInfinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1312
	self infinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1313
	self infinity isInfinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1314
	self negativeInfinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1315
	self negativeInfinity isInfinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1316
	(0.0 uncheckedDivide: 0.0) isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1317
	(1.0 uncheckedDivide: 0.0) isFinite
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1318
    "
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1319
!
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1320
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1321
isNaN
5194
b4f517f893f1 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5075
diff changeset
  1322
    "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
  1323
     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
  1324
     however, inline C-code could produce them."
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1325
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1326
%{  /* NOCONTEXT */
5016
fe5e7a43b7f0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5014
diff changeset
  1327
#ifdef SUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1328
    float128_t myVal;
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1329
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1330
    myVal = __quadFloatVal(self);
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1331
    RETURN (STX_isNanq(&myVal) ? true : false);
5016
fe5e7a43b7f0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5014
diff changeset
  1332
#endif // SUPPORT_QUADFLOAT
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1333
%}.
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1334
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1335
    "
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1336
	1.0 asQuadFloat isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1337
	self NaN isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1338
	self infinity isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1339
	(0.0 uncheckedDivide: 0.0) isFinite
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1340
	(1.0 uncheckedDivide: 0.0) isFinite
5011
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1341
    "
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1342
! !
889548e8808e #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 5008
diff changeset
  1343
5276
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1344
!QuadFloat methodsFor:'testing'!
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1345
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1346
isQuadFloat
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1347
    "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
  1348
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1349
    ^ true
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1350
! !
b81062a163d4 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 5269
diff changeset
  1351
4983
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1352
!QuadFloat class methodsFor:'documentation'!
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1353
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1354
version_CVS
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1355
    ^ '$Header$'
696dd6d07736 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1356
! !
5290
8572a1e6ceba #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5287
diff changeset
  1357