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 "rtsrmath.h"
00027 #include "xscclass.hpp"
00028 #define CXSC_INCLUDE
00029 #undef LINT_ARGS
00030 #include <fi_lib.hpp>
00031 #undef CXSC_INCLUDE
00032
00033
00034
00035 namespace cxsc{
00036 using namespace fi_lib;
00037 inline real t_std_fct_call(int (fct)(const ExtReal *,ExtReal *),const real &arg)
00038 {
00039 real erg(arg);
00040 int rnd=t_grnd();
00041 t_srnd(NEAR);
00042 ExtReal a,r;
00043 t_ltoe((LongReal*)&erg,&a);
00044 fct(&a,&r);
00045 t_etol(&r,(LongReal*)&erg);
00046 t_srnd(rnd);
00047 return erg;
00048 }
00049
00050 inline real t_std_fct_call(int (fct)(const ExtReal *,const ExtReal *,ExtReal *),const real & arg1, const real & arg2)
00051 {
00052 real erg(arg1),expo(arg2);
00053 int rnd=t_grnd();
00054 t_srnd(NEAR);
00055 ExtReal a,b,r;
00056 t_ltoe((LongReal*)&erg,&a);
00057 t_ltoe((LongReal*)&expo,&b);
00058 fct(&a,&b,&r);
00059 t_etol(&r,(LongReal*)&erg);
00060 t_srnd(rnd);
00061 return erg;
00062 }
00063
00064 inline real sqr(const real &arg) throw() { return (arg*arg); }
00065 inline real sqrt(const real & arg) { return q_sqrt(*(double *)&arg); }
00066
00067 inline real sqrt(const real & arg,int n) { return pow(arg,1.0/n); }
00068
00069 inline real sqrtm1(const real & arg) {
00070 real erg(arg);
00071 int rnd=t_grnd();
00072 t_srnd(NEAR);
00073 ExtReal a,r;
00074 t_ltoe((LongReal*)&erg,&a);
00075 t_sqme(&a,&r);
00076 t_etol(&r,(LongReal*)&erg);
00077 t_srnd(rnd);
00078 return erg;
00079 }
00080
00081 inline real sin(const real & arg) throw() { return q_sin(*(double*)&arg); }
00082 inline real cos(const real & arg) throw() { return q_cos(*(double*)&arg); }
00083 inline real tan(const real & arg) throw() { return q_tan(*(double*)&arg); }
00084 inline real cot(const real & arg) throw() { return q_cot(*(double*)&arg); }
00085
00086 inline real asin(const real & arg) { return q_asin(*(double*)&arg); }
00087 inline real acos(const real & arg) { return q_acos(*(double*)&arg); }
00088 inline real atan(const real & arg) { return q_atan(*(double*)&arg); }
00089 inline real acot(const real & arg) { return q_acot(*(double*)&arg); }
00090
00091 inline real expm1(const real & arg)throw() { return q_expm(*(double*)&arg); }
00092 inline real lnp1(const real & arg) { return q_lg1p(*(double*)&arg); }
00093
00094 inline real exp(const real & arg) throw() { return q_exp(*(double*)&arg); }
00095 inline real ln(const real & arg) { return q_log(*(double*)&arg); }
00096 inline real log2(const real & arg) { return q_log2(*(double*)&arg); }
00097 inline real log10(const real & arg) { return q_lg10(*(double*)&arg); }
00098
00099 inline real sinh(const real & arg) throw() { return q_sinh(*(double*)&arg); }
00100 inline real cosh(const real & arg) throw() { return q_cosh(*(double*)&arg); }
00101 inline real tanh(const real & arg) throw() { return q_tanh(*(double*)&arg); }
00102 inline real coth(const real & arg) throw() { return q_coth(*(double*)&arg); }
00103
00104 inline real asinh(const real & arg) { return q_asnh(*(double*)&arg); }
00105 inline real acosh(const real & arg) { return q_acsh(*(double*)&arg); }
00106 inline real atanh(const real & arg) { return q_atnh(*(double*)&arg); }
00107 inline real acoth(const real & arg) { return q_acth(*(double*)&arg); }
00108
00120 inline real erf(const real & arg) { return q_erf(*(double*)&arg); }
00127 inline real erfc(const real & arg) { return q_erfc(*(double*)&arg); }
00128
00129
00130 inline real pow(const real & arg,const real &expo) {
00131 real erg(arg),expohelp(expo);
00132 int rnd=t_grnd();
00133 t_srnd(NEAR);
00134 ExtReal a,b,r;
00135 t_ltoe((LongReal*)&erg,&a);
00136 t_ltoe((LongReal*)&expohelp,&b);
00137 t_powe(&a,&b,&r);
00138 t_etol(&r,(LongReal*)&erg);
00139 t_srnd(rnd);
00140 return erg;
00141 }
00142
00143 inline real power(const real & arg,const int n) { return pow(arg,n); }
00144
00145 }
00146