flonum-const.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /* flonum_const.c - Useful Flonum constants
  2. Copyright (C) 1987 Free Software Foundation, Inc.
  3. This file is part of GAS, the GNU Assembler.
  4. GAS is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 1, or (at your option)
  7. any later version.
  8. GAS is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with GAS; see the file COPYING. If not, write to
  14. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
  15. #include "flonum.h"
  16. /* JF: I added the last entry to this table, and I'm not
  17. sure if its right or not. Could go either way. I wish
  18. I really understood this stuff. */
  19. int table_size_of_flonum_powers_of_ten = 11;
  20. static LITTLENUM_TYPE zero[] = { 1 };
  21. /***********************************************************************\
  22. * *
  23. * Warning: the low order bits may be WRONG here. *
  24. * I took this from a suspect bc(1) script. *
  25. * "minus_X"[] is supposed to be 10^(2^-X) expressed in base 2^16. *
  26. * The radix point is just AFTER the highest element of the [] *
  27. * *
  28. * Because bc rounds DOWN for printing (I think), the lowest *
  29. * significance littlenums should probably have 1 added to them. *
  30. * *
  31. \***********************************************************************/
  32. /* JF: If this equals 6553/(2^16)+39321/(2^32)+... it approaches .1 */
  33. static LITTLENUM_TYPE minus_1 [] = {
  34. 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321,
  35. 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 6553 };
  36. static LITTLENUM_TYPE plus_1 [] = { 10 };
  37. /* JF: If this equals 655/(2^16) + 23592/(2^32) + ... it approaches .01 */
  38. static LITTLENUM_TYPE minus_2 [] = {
  39. 10485, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 49807,
  40. 10485, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 655 };
  41. static LITTLENUM_TYPE plus_2 [] = { 100 };
  42. /* This approaches .0001 */
  43. static LITTLENUM_TYPE minus_3 [] = {
  44. 52533, 20027, 37329, 65116, 64067, 60397, 14784, 18979, 33659, 19503,
  45. 2726, 9542, 629, 2202, 40475, 10590, 4299, 47815, 36280, 6 };
  46. static LITTLENUM_TYPE plus_3 [] = { 10000 };
  47. /* JF: this approaches 1e-8 */
  48. static LITTLENUM_TYPE minus_4 [] = {
  49. 22516, 49501, 54293, 19424, 60699, 6716, 24348, 22618, 23904, 21327,
  50. 3919, 44703, 19149, 28803, 48959, 6259, 50273, 62237, 42 };
  51. /* This equals 1525 * 2^16 + 57600 */
  52. static LITTLENUM_TYPE plus_4 [] = { 57600, 1525 };
  53. /* This approaches 1e-16 */
  54. static LITTLENUM_TYPE minus_5 [] = {
  55. 22199, 45957, 17005, 26266, 10526, 16260, 55017, 35680, 40443, 19789,
  56. 17356, 30195, 55905, 28426, 63010, 44197, 1844 };
  57. static LITTLENUM_TYPE plus_5 [] = { 28609, 34546, 35 };
  58. static LITTLENUM_TYPE minus_6 [] = {
  59. 30926, 26518, 13110, 43018, 54982, 48258, 24658, 15209, 63366, 11929,
  60. 20069, 43857, 60487, 51 };
  61. static LITTLENUM_TYPE plus_6 [] = { 61313, 34220, 16731, 11629, 1262 };
  62. static LITTLENUM_TYPE minus_7 [] = {
  63. 29819, 14733, 21490, 40602, 31315, 65186, 2695 };
  64. static LITTLENUM_TYPE plus_7 [] = {
  65. 7937, 49002, 60772, 28216, 38893, 55975, 63988, 59711, 20227, 24 };
  66. static LITTLENUM_TYPE minus_8 [] = {
  67. 45849, 19069, 18068, 36324, 37948, 48745, 10873, 64360, 15961, 20566,
  68. 24178, 15922, 59427, 110 };
  69. static LITTLENUM_TYPE plus_8 [] = {
  70. 15873, 11925, 39177, 991, 14589, 19735, 25347, 65086, 53853, 938,
  71. 37209, 47086, 33626, 23253, 32586, 42547, 9731, 59679, 590 };
  72. static LITTLENUM_TYPE minus_9 [] = {
  73. 63601, 55221, 43562, 33661, 29067, 28203, 65417, 64352, 22462, 41110,
  74. 12570, 28635, 23199, 50572, 28471, 27074, 46375, 64028, 13106, 63700,
  75. 32698, 17493, 32420, 34382, 22750, 20681, 12300 };
  76. static LITTLENUM_TYPE plus_9 [] = {
  77. 63564, 61556, 29377, 54467, 18621, 28141, 36415, 61241, 47119, 30026,
  78. 19740, 46002, 13541, 61413, 30480, 38664, 32205, 50593, 51112, 48904,
  79. 48263, 43814, 286, 30826, 52813, 62575, 61390, 24540, 21495, 5 };
  80. static LITTLENUM_TYPE minus_10 [] = {
  81. 50313, 34681, 1464, 25889, 19575, 41125, 17635, 4598, 49708, 13427,
  82. 17287, 56115, 53783, 38255, 32415, 17778, 31596, 7557, 20951, 18477,
  83. 40353, 1178, 44405, 11837, 11571, 50963, 15649, 11698, 40675, 2308, };
  84. static LITTLENUM_TYPE plus_10[] = {
  85. 18520, 53764, 54535, 61910, 61962, 59843, 46270, 58053, 12473, 63785,
  86. 2449, 43230, 50044, 47595, 10403, 35766, 32607, 1124, 24966, 35044,
  87. 25524, 23631, 18826, 14518, 58448, 14562, 49618, 5588, 25396, 28 };
  88. static LITTLENUM_TYPE minus_11 [] = {
  89. 6223, 59909, 62437, 59960, 14652, 45336, 48800, 7647, 51962, 37982,
  90. 60436, 58176, 26767, 8440, 9831, 48556, 20994, 14148, 6757, 17221,
  91. 60624, 46129, 53210, 44085, 54016, 24259, 11232, 21229, 21313, 81, };
  92. static LITTLENUM_TYPE plus_11 [] = {
  93. 36159, 2055, 33615, 61362, 23581, 62454, 9748, 15275, 39284, 58636,
  94. 16269, 42793, 47240, 45774, 50861, 48400, 9413, 40281, 4030, 9572,
  95. 7984, 33038, 59522, 19450, 40593, 24486, 54320, 6661, 55766, 805, };
  96. FLONUM_TYPE flonum_negative_powers_of_ten [] = {
  97. {zero, zero, zero, 0, '+'},
  98. {minus_1, minus_1 + 19, minus_1 + 19, -20, '+'},
  99. {minus_2, minus_2 + 19, minus_2 + 19, -20, '+'},
  100. {minus_3, minus_3 + 19, minus_3 + 19, -20, '+'},
  101. {minus_4, minus_4 + 18, minus_4 + 18, -20, '+'},
  102. {minus_5, minus_5 + 16, minus_5 + 16, -20, '+'},
  103. {minus_6, minus_6 + 13, minus_6 + 13, -20, '+'},
  104. {minus_7, minus_7 + 6, minus_7 + 6, -20, '+'},
  105. {minus_8, minus_8 + 13, minus_8 + 13, -40, '+'},
  106. {minus_9, minus_9 + 26, minus_9 + 26, -80, '+'},
  107. {minus_10, minus_10 + 29, minus_10 + 29, -136, '+'},
  108. {minus_11, minus_11 + 29, minus_11 + 29, -242, '+'},
  109. };
  110. FLONUM_TYPE flonum_positive_powers_of_ten [] = {
  111. {zero, zero, zero, 0, '+'},
  112. {plus_1, plus_1 + 0, plus_1 + 0, 0, '+'},
  113. {plus_2, plus_2 + 0, plus_2 + 0, 0, '+'},
  114. {plus_3, plus_3 + 0, plus_3 + 0, 0, '+'},
  115. {plus_4, plus_4 + 1, plus_4 + 1, 0, '+'},
  116. {plus_5, plus_5 + 2, plus_5 + 2, 1, '+'},
  117. {plus_6, plus_6 + 4, plus_6 + 4, 2, '+'},
  118. {plus_7, plus_7 + 9, plus_7 + 9, 4, '+'},
  119. {plus_8, plus_8 + 18, plus_8 + 18, 8, '+'},
  120. {plus_9, plus_9 + 29, plus_9 + 29, 24, '+'},
  121. {plus_10, plus_10 + 29, plus_10 + 29, 77, '+'},
  122. {plus_11, plus_11 + 29, plus_11 + 29, 183, '+'},
  123. };
  124. #ifdef VMS
  125. dummy1()
  126. {
  127. }
  128. #endif
  129. /* end: flonum_const.c */