00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "real.hpp"
00027 #include "ioflags.hpp"
00028
00029 namespace cxsc {
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00052 const real& MakeHexReal(int sign, unsigned int expo, a_btyp manthigh, a_btyp mantlow)
00053 {
00054 static real a;
00055 ((a_btyp*)&a)[LOWREAL] = mantlow,
00056 ((a_btyp*)&a)[HIGHREAL] = manthigh & 0xFFFFFL,
00057 ((a_btyp*)&a)[HIGHREAL] |= ((a_btyp) (expo & 0x7FF)) << 20,
00058 ((a_btyp*)&a)[HIGHREAL] |= (sign ? 0x80000000L : 0x00000000);
00059 return a;
00060 }
00061
00062 const real MinReal = MakeHexReal(0, 0x001, 0x00000L, 0x00000000L);
00063 const real minreal = MakeHexReal(0, 0x000, 0x00000L, 0x00000001L);
00064
00065 const real MaxReal = MakeHexReal(0, 0x7FE, 0xFFFFFL, 0xFFFFFFFFL);
00066 const real Infinity = MakeHexReal(0, 0x7FF, 0x00000L, 0x00000000L);
00067 const real SignalingNaN = MakeHexReal(1, 0x7FF, 0x80000L, 0x00000000L);
00068 const real QuietNaN = MakeHexReal(0, 0x7FF, 0x00000L, 0x00000001L);
00069 const real Epsilon = power(2,-53);
00070 const real Factor = power(2, 27) + 1;
00071
00072
00073
00074
00075 const real Pi_real = 7074237752028440.0 / 2251799813685248.0;
00076 const real Pi2_real = 7074237752028440.0/1125899906842624.0;
00077 const real Pi3_real = 5305678314021330.0/562949953421312.0;
00078 const real Pid2_real = 7074237752028440.0/4503599627370496.0;
00079 const real Pid3_real = 4716158501352294.0/4503599627370496.0;
00080 const real Pid4_real = 7074237752028440.0/9007199254740992.0;
00081 const real Pir_real = 5734161139222659.0/18014398509481984.0;
00082 const real Pi2r_real = 5734161139222659.0/36028797018963968.0;
00083 const real Pip2_real = 5556093337880030.0/562949953421312.0;
00084 const real SqrtPi_real = 7982422502469483.0/4503599627370496.0;
00085 const real Sqrt2Pi_real = 5644425081792262.0/2251799813685248.0;
00086 const real SqrtPir_real = 5081767996463981.0/9007199254740992.0;
00087 const real Sqrt2Pir_real = 7186705221432913.0/18014398509481984.0;
00088 const real Sqrt2_real = 6369051672525773.0/4503599627370496.0;
00089 const real Sqrt5_real = 5035177455121576.0 / 2251799813685248.0;
00090 const real Sqrt7_real = 5957702309312746.0 / 2251799813685248.0;
00091 const real Sqrt2r_real = 6369051672525773.0/9007199254740992.0;
00092 const real Sqrt3_real = 7800463371553962.0/4503599627370496.0;
00093 const real Sqrt3d2_real = 7800463371553962.0/9007199254740992.0;
00094 const real Sqrt3r_real = 5200308914369308.0/9007199254740992.0;
00095 const real Ln2_real = 6243314768165359.0 / 9007199254740992.0;
00096 const real Ln2r_real = 6497320848556798.0 / 4503599627370496.0;
00097 const real Ln10_real = 5184960683398422.0 / 2251799813685248.0;
00098 const real Ln10r_real = 7823553867474190.0/18014398509481984.0;
00099 const real LnPi_real = 5155405087351229.0 / 4503599627370496.0;
00100 const real Ln2Pi_real = 8277062471433909.0/4503599627370496.0;
00101 const real E_real = 6121026514868073.0 / 2251799813685248.0;
00102 const real Er_real = 6627126856707896.0 / 18014398509481984.0;
00103 const real Ep2_real = 8319337573440942.0 / 1125899906842624.0;
00104 const real Ep2r_real = 4875967449235916.0/36028797018963968.0;
00105 const real EpPi_real = 6513525919879994.0/281474976710656.0;
00106 const real Ep2Pi_real = 4710234414611993.0/8796093022208.0;
00107 const real EpPid2_real = 5416116035097439.0/1125899906842624.0;
00108 const real EpPid4_real = 4938827609611434.0/2251799813685248.0;
00109
00110 }