|
|
- /* Testing Code */
-
- #include <limits.h>
- #include <math.h>
-
- /* Routines used by floation point test code */
-
- /* Convert from bit level representation to floating point number */
- float u2f(unsigned u) {
- union {
- unsigned u;
- float f;
- } a;
- a.u = u;
- return a.f;
- }
-
- /* Convert from floating point number to bit-level representation */
- unsigned f2u(float f) {
- union {
- unsigned u;
- float f;
- } a;
- a.f = f;
- return a.u;
- }
-
- /* Copyright (C) 1991-2020 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
- /* This header is separate from features.h so that the compiler can
- include it implicitly at the start of every compilation. It must
- not itself include <features.h> or any other header that includes
- <features.h> because the implicit include comes before any feature
- test macros that may be defined in a source file before it first
- explicitly includes a system header. GCC knows the name of this
- header in order to preinclude it. */
- /* glibc's intent is to support the IEC 559 math functionality, real
- and complex. If the GCC (4.9 and later) predefined macros
- specifying compiler intent are available, use them to determine
- whether the overall intent is to support these features; otherwise,
- presume an older compiler has intent to support these features and
- define these macros by default. */
- /* wchar_t uses Unicode 10.0.0. Version 10.0 of the Unicode Standard is
- synchronized with ISO/IEC 10646:2017, fifth edition, plus
- the following additions from Amendment 1 to the fifth edition:
- - 56 emoji characters
- - 285 hentaigana
- - 3 additional Zanabazar Square characters */
- //1
- int test_bitXor(int x, int y)
- {
- return x^y;
- }
- int test_tmin(void) {
- return 0x80000000;
- }
- //2
- int test_isTmax(int x) {
- return x == 0x7FFFFFFF;
- }
- int test_allOddBits(int x) {
- int i;
- for (i = 1; i < 32; i+=2)
- if ((x & (1<<i)) == 0)
- return 0;
- return 1;
- }
- int test_negate(int x) {
- return -x;
- }
- //3
- int test_isAsciiDigit(int x) {
- return (0x30 <= x) && (x <= 0x39);
- }
- int test_conditional(int x, int y, int z)
- {
- return x?y:z;
- }
- int test_isLessOrEqual(int x, int y)
- {
- return x <= y;
- }
- //4
- int test_logicalNeg(int x)
- {
- return !x;
- }
- int test_howManyBits(int x) {
- unsigned int a, cnt;
- x = x<0 ? -x-1 : x;
- a = (unsigned int)x;
- for (cnt=0; a; a>>=1, cnt++)
- ;
- return (int)(cnt + 1);
- }
- //float
- unsigned test_floatScale2(unsigned uf) {
- float f = u2f(uf);
- float tf = 2*f;
- if (isnan(f))
- return uf;
- else
- return f2u(tf);
- }
- int test_floatFloat2Int(unsigned uf) {
- float f = u2f(uf);
- int x = (int) f;
- return x;
- }
- // #include "floatPower2.c"
|