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