Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r75070 - in sandbox/big_number: boost/multiprecision boost/multiprecision/detail/functions libs/multiprecision/test
From: john_at_[hidden]
Date: 2011-10-20 14:16:48


Author: johnmaddock
Date: 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
New Revision: 75070
URL: http://svn.boost.org/trac/boost/changeset/75070

Log:
Tidy up the tests with boilerplate relative error calculation.
Fix eval_ldexp for mpf_t.
Fix power and log calculations.
Add acos.
Get all the tests passing.
Added:
   sandbox/big_number/libs/multiprecision/test/test_acos.cpp (contents, props changed)
Text files modified:
   sandbox/big_number/boost/multiprecision/detail/functions/pow.hpp | 10
   sandbox/big_number/boost/multiprecision/detail/functions/trig.hpp | 39 ++++++
   sandbox/big_number/boost/multiprecision/gmp.hpp | 2
   sandbox/big_number/libs/multiprecision/test/Jamfile.v2 | 16 +++
   sandbox/big_number/libs/multiprecision/test/test_asin.cpp | 9 +
   sandbox/big_number/libs/multiprecision/test/test_cos.cpp | 211 +++++++++++++++++++-------------------
   sandbox/big_number/libs/multiprecision/test/test_cosh.cpp | 5
   sandbox/big_number/libs/multiprecision/test/test_exp.cpp | 154 ++++++++++++++++++----------
   sandbox/big_number/libs/multiprecision/test/test_log.cpp | 9 +
   sandbox/big_number/libs/multiprecision/test/test_pow.cpp | 7
   sandbox/big_number/libs/multiprecision/test/test_sin.cpp | 213 ++++++++++++++++++++-------------------
   sandbox/big_number/libs/multiprecision/test/test_sinh.cpp | 5
   sandbox/big_number/libs/multiprecision/test/test_tanh.cpp | 5
   13 files changed, 400 insertions(+), 285 deletions(-)

Modified: sandbox/big_number/boost/multiprecision/detail/functions/pow.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/detail/functions/pow.hpp (original)
+++ sandbox/big_number/boost/multiprecision/detail/functions/pow.hpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -120,7 +120,7 @@
       multiply(x_pow_n_div_n_fact, x);
       divide(x_pow_n_div_n_fact, n);
       add(H0F0, x_pow_n_div_n_fact);
- bool neg = get_sign(x_pow_n_div_n_fact);
+ bool neg = get_sign(x_pow_n_div_n_fact) < 0;
       if(neg)
          x_pow_n_div_n_fact.negate();
       if(lim.compare(x_pow_n_div_n_fact) > 0)
@@ -164,7 +164,7 @@
    T term, part;
 
    // Series expansion of hyperg_1f0(a; ; x).
- for(n = 2; n < 1000; n++)
+ for(n = 2; n < std::numeric_limits<mp_number<T> >::digits + 10; n++)
    {
       multiply(x_pow_n_div_n_fact, x);
       divide(x_pow_n_div_n_fact, n);
@@ -174,10 +174,10 @@
       add(H1F0, term);
       if(get_sign(term) < 0)
          term.negate();
- if(lim.compare(term) < 0)
+ if(lim.compare(term) >= 0)
          break;
    }
- if(n >= 1000)
+ if(n >= std::numeric_limits<mp_number<T> >::digits + 10)
       throw std::runtime_error("H1F0 failed to converge");
 }
 
@@ -461,7 +461,7 @@
       return;
    }
 
- if((get_sign(x) > 0) && (x.compare(fp_type(0.1)) > 0) && (x.compare(fp_type(0.9)) < 0))
+ if((get_sign(x) > 0) && (x.compare(fp_type(0.5)) >= 0) && (x.compare(fp_type(0.9)) < 0))
    {
       if(a.compare(fp_type(1e-5f)) <= 0)
       {

Modified: sandbox/big_number/boost/multiprecision/detail/functions/trig.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/detail/functions/trig.hpp (original)
+++ sandbox/big_number/boost/multiprecision/detail/functions/trig.hpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -468,8 +468,6 @@
       t2 = fp_type(1.5f);
       hyp2F1(result, t1, t1, t2, xx);
       multiply(result, x);
- if(b_neg)
- result.negate();
       return;
    }
    else if(xx.compare(fp_type(1 - 1e-4f)) > 0)
@@ -521,4 +519,41 @@
       result.negate();
 }
 
+template <class T>
+inline void eval_acos(T& result, const T& x)
+{
+ typedef typename boost::multiprecision::detail::canonical<boost::uint32_t, T>::type ui_type;
+
+ switch(eval_fpclassify(x))
+ {
+ case FP_NAN:
+ case FP_INFINITE:
+ result = std::numeric_limits<mp_number<T> >::quiet_NaN().backend();
+ return;
+ case FP_ZERO:
+ result = get_constant_pi<T>();
+ eval_ldexp(result, result, -1); // divide by two.
+ return;
+ }
+
+ eval_abs(result, x);
+ int c = result.compare(ui_type(1));
+
+ if(c > 0)
+ {
+ result = std::numeric_limits<mp_number<T> >::quiet_NaN().backend();
+ return;
+ }
+ else if(c == 0)
+ {
+ result = ui_type(0);
+ return;
+ }
+
+ eval_asin(result, x);
+ T t;
+ eval_ldexp(t, get_constant_pi<T>(), -1);
+ subtract(result, t);
+ result.negate();
+}
 

Modified: sandbox/big_number/boost/multiprecision/gmp.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/gmp.hpp (original)
+++ sandbox/big_number/boost/multiprecision/gmp.hpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -673,6 +673,8 @@
       mpf_mul_2exp(result.data(), val.data(), e);
    else if(e < 0)
       mpf_div_2exp(result.data(), val.data(), -e);
+ else
+ result = val;
 }
 template <unsigned Digits10>
 inline void eval_frexp(gmp_real<Digits10>& result, const gmp_real<Digits10>& val, int* e)

Modified: sandbox/big_number/libs/multiprecision/test/Jamfile.v2
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/Jamfile.v2 (original)
+++ sandbox/big_number/libs/multiprecision/test/Jamfile.v2 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -331,3 +331,19 @@
          [ check-target-builds ../config//has_mpfr : : <build>no ]
         : test_asin_mpfr_50 ;
 
+run test_acos.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPF50
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ : test_acos_mpf50 ;
+
+run test_acos.cpp mpfr
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPFR_50
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ : test_acos_mpfr_50 ;
+

Added: sandbox/big_number/libs/multiprecision/test/test_acos.cpp
==============================================================================
--- (empty file)
+++ sandbox/big_number/libs/multiprecision/test/test_acos.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -0,0 +1,106 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/array.hpp>
+#include "test.hpp"
+
+#if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
+# define TEST_MPF50
+//# define TEST_MPF
+# define TEST_BACKEND
+# define TEST_E_FLOAT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_architypes.hpp>
+#endif
+#ifdef TEST_E_FLOAT
+#include <boost/multiprecision/e_float.hpp>
+#endif
+
+template <class T>
+void test()
+{
+ //
+ // Test with some exact binary values as input - this tests our code
+ // rather than the test data:
+ //
+ static const boost::array<boost::array<T, 2>, 13> exact_data =
+ {{
+ {{ 0.5, "1.04719755119659774615421446109316762806572313312503527365831486410260546876206966620934494178070568932738269550442743555" }},
+ {{ 0.25, "1.31811607165281796574566425464604046984639096659071471685354851741333314266208327690226867044304393238598144034722708676" }},
+ {{0.75, "0.722734247813415611178377352641333362025218486424440267626754132583707381914630264964827610939101303690078815991333621490" }},
+ {{1 - std::ldexp(1.0, -20), "0.00138106804176241718210883847756746694048570648553426714212025111150044290934710742282266738617709904634187850607042604204" }},
+ {{std::ldexp(1.0, -20), "1.57079537312058021283676140197495835299636605165647561806789944133748780804448843729970624018104090863783682329820313127" }},
+ {{1, "0" }},
+
+ {{0, "1.57079632679489661923132169163975144209858469968755291048747229615390820314310449931401741267105853399107404325664115332" }},
+
+ {{ -0.5, "2.09439510239319549230842892218633525613144626625007054731662972820521093752413933241868988356141137865476539100885487110" }},
+ {{ -0.25, "1.82347658193697527271697912863346241435077843278439110412139607489448326362412572172576615489907313559616664616605521989" }},
+ {{-0.75, "2.41885840577637762728426603063816952217195091295066555334819045972410902437157873366320721440301576429206927052194868516" }},
+ {{-1 + std::ldexp(1.0, -20), "3.14021158554803082128053454480193541725668369288957155383282434119631596337686189120521215795593996893580620800721188061" }},
+ {{-std::ldexp(1.0, -20), "1.57079728046921302562588198130454453120080334771863020290704515097032859824172056132832858516107615934431126321507917538" }},
+ {{-1, "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230665" }},
+ }};
+ T half_pi = "1.57079632679489661923132169163975144209858469968755291048747229615390820314310449931401741267105853399107404325664115332354692230477529111586267970406424055872514205135096926055277982231147447746519098221440548783296672306423782411689339158263560095457282428346173017430522716332410669680363012457064";
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < exact_data.size(); k++)
+ {
+ T val = acos(exact_data[k][0]);
+ T e = relative_error(val, exact_data[k][1]);
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+ BOOST_TEST(max_err < 20);
+ BOOST_TEST(asin(T(0)) == 0);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::mp_number<boost::multiprecision::concepts::mp_number_backend_real_architype> >();
+#endif
+#ifdef TEST_MPF50
+ test<boost::multiprecision::mpf_real_50>();
+ test<boost::multiprecision::mpf_real_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_real_50>();
+ test<boost::multiprecision::mpfr_real_100>();
+#endif
+#ifdef TEST_E_FLOAT
+ test<boost::multiprecision::e_float>();
+#endif
+ return boost::report_errors();
+}
+
+
+

Modified: sandbox/big_number/libs/multiprecision/test/test_asin.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_asin.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_asin.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -10,6 +10,7 @@
 
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/array.hpp>
+#include "test.hpp"
 
 #if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
 # define TEST_MPF50
@@ -59,15 +60,19 @@
    for(unsigned k = 0; k < exact_data.size(); k++)
    {
       T val = asin(exact_data[k][0]);
- T e = (exact_data[k][1] == 0) ? T(ceil(fabs((val - exact_data[k][1]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val - exact_data[k][1]) / exact_data[k][1]) / std::numeric_limits<T>::epsilon()));
+ T e = relative_error(val, exact_data[k][1]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
       val = asin(-exact_data[k][0]);
- e = T(ceil(fabs((val + exact_data[k][1]) / exact_data[k][1]) / std::numeric_limits<T>::epsilon()));
+ e = relative_error(val, T(-exact_data[k][1]));
       err = e.template convert_to<unsigned>();
       if(err > max_err)
+ {
+ std::cout << val << std::endl;
+ std::cout << -exact_data[k][0] << std::endl;
          max_err = err;
+ }
    }
    std::cout << "Max error was: " << max_err << std::endl;
    BOOST_TEST(max_err < 20);

Modified: sandbox/big_number/libs/multiprecision/test/test_cos.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_cos.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_cos.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -10,6 +10,7 @@
 
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/array.hpp>
+#include "test.hpp"
 
 #if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
 # define TEST_MPF50
@@ -44,107 +45,107 @@
 {
    static const boost::array<T, 101u> data =
    {{
- T("-0.50162154214905535006507934761566421365808962336874567677926739022768858180703782104157334491773507690211622144412751863172893119122904872120863946237533655183100979972269651012785895305465091942482860884709266947899655662267052604131701946158941092922207257375120965677001058006645609151579188243577188192831765423148813895489546306047297711022539509473462404019089733447430114238267379980532396311664"),
- T("0.60313571428133694309325113655636540756247392441681227046917143280974317371916820972719995253248954425492897594051861535050840463205496306256237562726891289696301688567930026444972968333329934552460084325207412884738539384203738886072440013640125030433738691853586812704775040754220545555524237855361445575868855139945713834823411715711428213828850093318644478373792898000948569667301322178250159228606"),
- T("0.96902885660223213449832417965462288346382027027907788639786102888188268413128284808786908788351970794814191573322198094839000459295090920127430762740525901384778314480815531039485728089512489227948630012091333107823627672161756650613535363845597750943844039360212709462602480040358932164638277463645635101178868520058961493135889052671922314786442189473233561252419424865659925386520422456933994031412"),
- T("0.14782491492260520954264860310453392894688582499520847868449990765772811594316839506757584243129175527745236732059643506743012867347391315093605558463510078020864683057368198129858823908327097108583620570511151521896111105026538667326749527786043478669088587777236123716686756088055458828079103458534402182273835161066708126746360741813126817035007484464329141515901214558732724557437706092450180726378"),
- T("-0.85447015139344948471094821054366626768019606763269341666053644333072070840260166961763856973284893831954425042860099172316086950440334996806598196522184690224018944138578542327045770832471332376269716674841615467614625539483750018876502303839670098606230317226296309325404589665701938190004997832683948796843166639576625281030300467522347494569768687089899397360725496800596493559470637547748735594697"),
- T("-0.81000689036588888102398287378618104836450574863713892332248232301021899106208419137911694670935600210389307190348154033680700645928539580731142634010602466147128679656911798991740456705453963764056901956423046807435258488930954638670002070774439646670450724500520094586192645160847046520311570082832431061691996839606591067443335185302732221888316818825870721496315105401624866741940813589284275695918"),
- T("0.2267455177003321384894005667464998092097833850092894238480831378466683827110057043871346060005709235569800215748516185659827893723700508589640891976972716570403665692613477548038629552153079218542242417184271182264022470709072429310981387965885388758575814101891100826647083444934684812292662215448102626341015149572372707444725994248777658076421636637760492982947444020394182326376291158696727384852"),
- T("0.98572607094681400469823142383450564975177916157871840422129452719452525174019803417354200370408054482797693621385765351670173144053171524005535725427317409189868483686977845578192854125777358818593005952568285102554187813023457756929121023181880198348203083841375515867843145321766318476866476607321938993078073105088587752971311300418067382395754489252201424628686354714684325074264340586434068083735"),
- T("0.53715481965030691887397316962489853948341836449029599646266321884877186476498260019355874856809552188645630606126976563119123530724283602396484950653123503399938294688332329634386257314146589125825636097592371320563696604271190825947497633567945681092924620382686009619110102110209885034787176755762448527267043281608584015012767667899712762371285806841811102653584612955459666723163160014123341963671"),
- T("-0.56945144858011886915780505911780725010620323062276283805115420871306570794972703588425077520601752861293077323301792800610549113139402646104081762175534061087117946244152125287975953108704696268847815261917377065241801643783329354778399526877290332215236634903080639679860355847620563822363712579548641527844739938293967364597110377469773489014211951212857101374318452911401420528677259991331090266005"),
- T("-0.97845810511310366097345864112668906661089075307983663561178996977421991305045684012227818895513901547325249161241097295038349597373820690088476031256136981855438584632935895625291791741570973153071536443895825053372019222244541345181800559983327493395843212471107951435623879503589116197386166395270332969985628390518342285544128149350904869144760786557644083102040293619728857795557725975446387638082"),
- T("-0.18881649076882036818094718893825891946691295900905829577570255489597056088743777799436529545269699011594065157007321752198038423373390670103253610646983030773571922979273600163598344653044825786274322207994738104766932351285365246017952816761886637102290439956065197679903357501267350062489863581450400525901254917975058272557102311416424438039867176899411547343130655797011597302924818642795986910776"),
- T("0.83213248256248718391648282211236200464150938178343837417522635579213705328552770623957486792338755433958256100224720251839082676782210674078979903328623897712870422600430978907177584667709552233768475968506874004560085480509103334782228549116928850495590090914133655583767781543886956699592465303315591578411513564172526903206600594554996369316967222569167592338646796759203865876228192676690576393957"),
- T("0.83368761966098380317914918853127190012005517198095141616372457983351189700156411681039093358761555771758536229588242982647239744187242300801829995961871412772468923394414109025642424234703592018655517051393077978860068845984020869413624371103031896740117407710299198562267502869147100200858539656754317575041431701939759759225389946719106478332366708137354276007919533255169664638235639383569564110075"),
- T("-0.18605618137227649584671124815631620875769157093190685600569736108086402885199167407702422320100843062616644714444408614621390574242763877642390939806307957026167805604628333909629405976831956784535026886701013223479257442178936513209253370459988519785036119662696969209506800793520534365946487576733594348627957021254017447520897947123358509837940617442852539597167693389591380189862319487892792923153"),
- T("-0.97787410706912947200700947809086987929552083940545236541182287303790608208610023257624198390105132776123115664110406549669787968717953162987933260638310530750565076435745587024443942712810356372635589174338356282870564205603334997652974637518927664227105047973535688395040777968082125500061259190313820373870936866720823176265958448162090987423326403872038897090958331050185525989399368410147697601184"),
- T("-0.57175918163121264025616107589630751551161205724757288681494194505248342228571881008866075970817690438186545379919710148119548771419260784258379302863349865022779589406640338106461807885184578720013258862884778613907350162349826641089246855371608494365729193629734711852175384638728815913727055118781471960575965215193534386589450370243853256890375165575818694142504618584610839931680003465519416417686"),
- T("0.53478241597498682890636923119124507573138434225226478301997338705931821657049944750562391125304256759887391004338167587322019260365925435302391176930331161896818003746464685277508807805130884660314731429722219318699505836398912422599554793162364836595300619860913573673921432325981205409702897337053197706014049687225094538593517626884763534008626048851538197945922313231461994435494917556595912129444"),
- T("0.98619528108436834444622772244233500550001863518169392038562682097011946713614830549103565779570404766638555367268020992254689671390965312890416679706192473068433717014095521991774567755994345709131209844512998942709582638991869821050636439257597063856249038092119512871640381123843890013812838185293393263756058350072768448458950380360337889770923256206901689904823829217396801268618019194906772703227"),
- T("0.22948154144509182369415746800698328364988547396475691620681392787566104183462052622980774444304368277802870979261579895452333488316470495027443871923297117956210113575448119970237881958246782891025814249305970662163236166516394039705137544157900789683194435211763787511069822409683486532927557658412323180776903688623277362060713475574739265599518489263464320833102602215450190502358534383949241852484"),
- T("-0.80835578582046670310464731711696478601773118159925609840597870029856375850957218864062941877059300809268098041286606529894870899049159003652074961379621476411176224648451902760457011220845176506086174749134555188467902316469475288975403773973857636373892326760376585744094430003550369691223550482756797212146056901318410686997010241891041855811922027651329719928389111111167862044112446757189042088046"),
- T("-0.85592663170679958406515397649643131309994249316454429005131578645085757570761552251729365670632975735279522675018975575836010210249068470527194075548251441076976420496548792075626757772699437483366302008026562909787676760497709271997930485538120627136230760141137536077186130465523928404376378372203755818590534658221264961808618483334189725855704258977192100851554017405085224133570406300901634686193"),
- T("0.14504509334766993343679732543237665601748015028110051986903855469561805431836897592755787294803720321294196670692675860425817019156006795472544060301573514970130737237352276407965078322598196015088783620318485742726789260216376389721616761481364286097504141935673467904417287244647363440435023754573347620436961058676078531225670052103877411944831266665091545142351559495386200504307614132116833066489"),
- T("0.96833108057454018135440242001894400433450486884893467698495154667147695605198346971512860434896301677316979407715828973045999189796179033252360390253384834782428911228350312995059296512013202981214049690155973624217982618572186690629393688668380855531415343035476364485845562203330354168788849023043609092864372997506131587372974589034738683570955059234741409975711088655065542622757333229038929539614"),
- T("0.60537478588662083093550030671881062835301187704838619957445140277346831579708290170559342372438997696786583564116411747796066131598667722839502247472418892060636953054544383896701697716904288008881811071365393348940494848858720140528491631498078923089892805069340832767510592701952499233084373444894649962175905154151059310656485499518493307751028032192138975110743944975104530590939205299365402172399"),
- T("-0.49918857050765127165246443100830980202323621859663295606411941969457362189652587284758726475585312743864487499288977743573076640209331558808543037798473406138898808010287039327632227491127621026484760216100025745074711422052006517238053729631745694408780163847537773119573702459176085803816861008338932982744241500509585746534632592189239382341678009278118030810458222678068124752194184440160812863357"),
- T("-0.99222700442041793244341637163672398376812477454144578739458582830385307501573374493329418110400264981611911650266336290704933803675752414608868505761080497715998786605323101072631863530928986865345605473152114701760347977346551445152252230086602267733482237318264916817026594817822201149718727077242483980112025554281082958570816251191650760457174817529165817706742958860474153596353298087887496342571"),
- T("-0.26974974384283529407135442904911380728022891803412415907499156005666362362451160206340942887714356745930732393405178421002248875485798257350416225295845333813028470892948983232570745331205136828532696050523659085855991735781739399449780199864580413509362957674310213115088541667662139444692787904342579506007770224294439456180398644394712078670122120840185549712701180444406705582313291159418160268707"),
- T("0.78318117881507218281256857540210491140619166393457160009274918850278377150347503811659906527658912201560000425062426213174077300808809107842767634667207644130246300983762258813379724135069575858579484972987736881337517572218810617863132592764984653001013079710817700332509430207238192747837232227382559069149116081099363790759716765670238049577887842168907894878101742345788299501918210802461045488336"),
- T("0.87668546801298894316611272503029374001219866661666136243743380759468378098691643969637456927472038354627520673349367283367324121916949272869177620477269451717775313582362761369952753768494804335788010017359300886827719062432162897060693014847129089532263482838487347672588768501033685070780610322543843882757687187812123549700825256897742477675410408774989851342602781239821815645715958753412070397601"),
- T("-0.10378317514630283035697337871092369012118223784464643078377333318832860627512487321975641507120202567300966096393096627338947655380820003149059343389474916418959764384086933825280338584080543377015355584259569741193189206873606119903440824298765910897401393832760642020478309582400187458069600297503471338694965049437285901431495005334289622152511502991672903524064211804721113695218039893263678813343"),
- T("-0.95711349446199095576893296201081918391006544549413893765144324906139169225887225012143883285387366088163020556116889558963741768284740305902934334806946850023570597825714830361465408561420292855043502515001498149850537134194706047165529988277670109220102766502269805527095332398862295461748072266537481745404509807754999697692445286508080110297609601749711507506133141464812431049826946597146636354781"),
- T("-0.63794350009531545667254180005058967014091074426028186874676752373058269762260454593384980188290943960936825811511438820242903324463297183316287071729253599410382790069375166807977207973311824805416905280934478728402362367738590911068930970233001798070025927580146476114118351752104439608955539133724726044901319895130615046919558595196176958507074369945336446902427277357686167969430099800901266255694"),
- T("0.46273146552227640776400067795797886210480882393837882658186448207173350896006259857463834781474074845803406523589452301046262359240960602310918185550315272791571940053255136983368027733514059954139407173745111843912155780937211468453669133666656749905679399238836226218178194842769436017337481617143672364099652685726181145621234602247890953107767351286824995678514316143524362442186848118247298539021"),
- T("0.99654284430835394575771581445263740011621544801262270069888725717770662527892701805906692059703566000057199727570596201090018843521079740099451243652812902235907552357808897819533630795824169795169152613897271256945242079733003533677278244438976511094582819587451104089603294510862191561695442770960262566234171127458107369852758518111412741106821369313642094603607640773678048962065297712686264798258"),
- T("0.30955146113330921967430965120100702675233631993391895373629969028737150573338643391886330012902676396897993034209801929950606565714260278367377830209837135331181218082619455762666764549875449196418398841614865341526715151403235213502358851080285994526097503071014059233244883279123955235243977740815084262049389088713424955579803462877942093968546097956762333725432236406001838616369819684003862992419"),
- T("-0.7566521966358354309951093880175904595961117293429649925035725302909818579817906207321292211570710827880191877879999303605651415336764708947953554392170782512559588243742231488130076898716985771987302881464753061056309847520640566277714873772103739495076986709669815846805764241489433274054604832770486905571732368583068561729787356544754173018704553303862640097086917153589464723040964231442327725739"),
- T("-0.89592822979483709059243413613768383910182989046075476634617095657797990928508436396136302337758704430356065256820357837873075721305029630953922861317062956315025129501726888033240428998214338302878323599895725515251065134297830575602290889130735518399074878206099064423045326729243958866358871543482110235173182896730253794606214425305515937065566938780643012662976806400899752708380354702107584200173"),
- T("0.06234178205498326768449331827227332778878332201276384069140804289468809818009465781317127499109411839409445261411097713389998386056235706454635141010244151932394411847811136494628546693592312682393427375069804704908617054121292472216996067137584186214292728977551151133236612796923969229055426308128461924845361007211592745940106076843829115607148914933190080636946774340167862449354032670081682503677"),
- T("0.94424074758905426693013670501578752072879728684274664557376317555913249162898450233304331602359948789616904949986891686512171337619053651010052765459159420933905715970952322156715741540214635674374384487833082591105216552403945633258288248064096802773248182125224091036161363816821787326423255076418870584794499423986465255713593740475609695103672895656428014974438779094737722426473065402390479127002"),
- T("0.66940900234972085772698395256659605212272643739109209667125733824405981903658617201709239065102665405063166964631091092744127095503906134074823656023393611554152837997449326176648259796105677009519668003831584281955537599169598905666609420488437109555473016150415050976685545370751598833602947303804286613228920011048601435648630323226945291269501824614939897919341523226599107705055297349402859236896"),
- T("-0.42547414721971330565409790138583216442479880361609527886964392881677619848933007107332651801952059053556471752375648666462158176314752197637071456256008899487321608724189395189615041157311878404609283475043414911337534183547148088572894035977423720231858134885165786681305346317203268564898788667422942217715710500639870156821380173286044798492696421543055302879445405671926952506373313300693015863574"),
- T("-0.99913533725625827895885420059533174260228060155728399323156205571706305217929202105237251086305720615246638608665744238167422868148494071388447512869369652666016804258416975268792629805702694345570129997561583877702300615841988105832696053353859384414627875276769517809636231032799628078938353066535288163274118038591394188369361821148103018841138634739652369087495081203873309267574158616396567307492"),
- T("-0.34881786319235757353608331390774426958801870286240250260169998305471883501204837208323576855595361379043170036069553791773607809536655382734659088580969476301635137094982435633208997311383294130223650445792658125459022909462690696664526317408366804098986643756477511847342019476173582109336405217301916061499808856137725615883817070458120962726145756438119220448588723418633370427189844667611481792962"),
- T("0.72881471652779599579578058763983370510799582516797066846624634893882199724038302182668125377701493863656762620352413750563017197413808000383697483717264271873855767687937510341726345841626061553517042595268476874385774311053499675017743616990623307920507987935959383718695693618200297497313502037997098069759583079411517535532519668785928165917878363955532156662323627880875149433884315003009524969368"),
- T("0.91362164005394510404798528088309623890018900746219043351480570272112701909791508825990618473644291633475042035900507995909672613140877257670920948316716218048879267235797825939302972470200910320624112626429381475376664864431458828213242682906890618620939480878412280722400697167591741919704297000951832259295785803906002953167528593565353099927772534139636590356175767293503013121188135804719329377757"),
- T("-0.020792579731020884570917489924829815990901072176716833800451630402659488568602453092320962870467062725056963726749091346237812411927788553678105022434525207164566719010754898510917339890499700846699846272929873718752144808990322962955858259663820680120429324521028803111432757858749225053719910422285494416920886558156485737807758736556364535329791051459890234311397811046030022550124420890079918499806"),
- T("-0.92973510112499140703211303301543817758564572287706026278579630272201180630168028836976329577763576080557925500836630218023453183589136530080853328463253256043937995662714702310301104590063206629677773404210676707719408386980510414385968423854465563338165624928483173590672543381355453313463456551085355191753472704341195875901211063845473814165083882940066653120643707041759352014177322989513249712945"),
- T("-0.69971687855481202313282264003416633874007708241691504684133936897916129633508695580324089944109853489892619325255884869329787559760565315713290477914000125094981765362135662354044758619666857636031878131847413243331348066629478769360995267702914881219005969303814156065237352978323936029385435868138673545623501852266665885946448589623038753247551331280396083996799682701685286072955536720942219340784"),
- T("0.38748104563009787102820133164016447769400048035334289735708379460553950678502357006276775381947203793501041447662719507628277154284594473586657342957139018292691624326995856690727098436205171520067762188653923456293311998678147550312423215288396830773761466919125058572139335774599032387616617354102353665454197825146894321951594670500888745959955736169293525665535786830770045479189693672271780123876"),
- T("1."),
- T("0.38748104563009787102820133164016447769400048035334289735708379460553950678502357006276775381947203793501041447662719507628277154284594473586657342957139018292691624326995856690727098436205171520067762188653923456293311998678147550312423215288396830773761466919125058572139335774599032387616617354102353665454197825146894321951594670500888745959955736169293525665535786830770045479189693672271780123876"),
- T("-0.69971687855481202313282264003416633874007708241691504684133936897916129633508695580324089944109853489892619325255884869329787559760565315713290477914000125094981765362135662354044758619666857636031878131847413243331348066629478769360995267702914881219005969303814156065237352978323936029385435868138673545623501852266665885946448589623038753247551331280396083996799682701685286072955536720942219340784"),
- T("-0.92973510112499140703211303301543817758564572287706026278579630272201180630168028836976329577763576080557925500836630218023453183589136530080853328463253256043937995662714702310301104590063206629677773404210676707719408386980510414385968423854465563338165624928483173590672543381355453313463456551085355191753472704341195875901211063845473814165083882940066653120643707041759352014177322989513249712945"),
- T("-0.020792579731020884570917489924829815990901072176716833800451630402659488568602453092320962870467062725056963726749091346237812411927788553678105022434525207164566719010754898510917339890499700846699846272929873718752144808990322962955858259663820680120429324521028803111432757858749225053719910422285494416920886558156485737807758736556364535329791051459890234311397811046030022550124420890079918499806"),
- T("0.91362164005394510404798528088309623890018900746219043351480570272112701909791508825990618473644291633475042035900507995909672613140877257670920948316716218048879267235797825939302972470200910320624112626429381475376664864431458828213242682906890618620939480878412280722400697167591741919704297000951832259295785803906002953167528593565353099927772534139636590356175767293503013121188135804719329377757"),
- T("0.72881471652779599579578058763983370510799582516797066846624634893882199724038302182668125377701493863656762620352413750563017197413808000383697483717264271873855767687937510341726345841626061553517042595268476874385774311053499675017743616990623307920507987935959383718695693618200297497313502037997098069759583079411517535532519668785928165917878363955532156662323627880875149433884315003009524969368"),
- T("-0.34881786319235757353608331390774426958801870286240250260169998305471883501204837208323576855595361379043170036069553791773607809536655382734659088580969476301635137094982435633208997311383294130223650445792658125459022909462690696664526317408366804098986643756477511847342019476173582109336405217301916061499808856137725615883817070458120962726145756438119220448588723418633370427189844667611481792962"),
- T("-0.99913533725625827895885420059533174260228060155728399323156205571706305217929202105237251086305720615246638608665744238167422868148494071388447512869369652666016804258416975268792629805702694345570129997561583877702300615841988105832696053353859384414627875276769517809636231032799628078938353066535288163274118038591394188369361821148103018841138634739652369087495081203873309267574158616396567307492"),
- T("-0.42547414721971330565409790138583216442479880361609527886964392881677619848933007107332651801952059053556471752375648666462158176314752197637071456256008899487321608724189395189615041157311878404609283475043414911337534183547148088572894035977423720231858134885165786681305346317203268564898788667422942217715710500639870156821380173286044798492696421543055302879445405671926952506373313300693015863574"),
- T("0.66940900234972085772698395256659605212272643739109209667125733824405981903658617201709239065102665405063166964631091092744127095503906134074823656023393611554152837997449326176648259796105677009519668003831584281955537599169598905666609420488437109555473016150415050976685545370751598833602947303804286613228920011048601435648630323226945291269501824614939897919341523226599107705055297349402859236896"),
- T("0.94424074758905426693013670501578752072879728684274664557376317555913249162898450233304331602359948789616904949986891686512171337619053651010052765459159420933905715970952322156715741540214635674374384487833082591105216552403945633258288248064096802773248182125224091036161363816821787326423255076418870584794499423986465255713593740475609695103672895656428014974438779094737722426473065402390479127002"),
- T("0.06234178205498326768449331827227332778878332201276384069140804289468809818009465781317127499109411839409445261411097713389998386056235706454635141010244151932394411847811136494628546693592312682393427375069804704908617054121292472216996067137584186214292728977551151133236612796923969229055426308128461924845361007211592745940106076843829115607148914933190080636946774340167862449354032670081682503677"),
- T("-0.89592822979483709059243413613768383910182989046075476634617095657797990928508436396136302337758704430356065256820357837873075721305029630953922861317062956315025129501726888033240428998214338302878323599895725515251065134297830575602290889130735518399074878206099064423045326729243958866358871543482110235173182896730253794606214425305515937065566938780643012662976806400899752708380354702107584200173"),
- T("-0.7566521966358354309951093880175904595961117293429649925035725302909818579817906207321292211570710827880191877879999303605651415336764708947953554392170782512559588243742231488130076898716985771987302881464753061056309847520640566277714873772103739495076986709669815846805764241489433274054604832770486905571732368583068561729787356544754173018704553303862640097086917153589464723040964231442327725739"),
- T("0.30955146113330921967430965120100702675233631993391895373629969028737150573338643391886330012902676396897993034209801929950606565714260278367377830209837135331181218082619455762666764549875449196418398841614865341526715151403235213502358851080285994526097503071014059233244883279123955235243977740815084262049389088713424955579803462877942093968546097956762333725432236406001838616369819684003862992419"),
- T("0.99654284430835394575771581445263740011621544801262270069888725717770662527892701805906692059703566000057199727570596201090018843521079740099451243652812902235907552357808897819533630795824169795169152613897271256945242079733003533677278244438976511094582819587451104089603294510862191561695442770960262566234171127458107369852758518111412741106821369313642094603607640773678048962065297712686264798258"),
- T("0.46273146552227640776400067795797886210480882393837882658186448207173350896006259857463834781474074845803406523589452301046262359240960602310918185550315272791571940053255136983368027733514059954139407173745111843912155780937211468453669133666656749905679399238836226218178194842769436017337481617143672364099652685726181145621234602247890953107767351286824995678514316143524362442186848118247298539021"),
- T("-0.63794350009531545667254180005058967014091074426028186874676752373058269762260454593384980188290943960936825811511438820242903324463297183316287071729253599410382790069375166807977207973311824805416905280934478728402362367738590911068930970233001798070025927580146476114118351752104439608955539133724726044901319895130615046919558595196176958507074369945336446902427277357686167969430099800901266255694"),
- T("-0.95711349446199095576893296201081918391006544549413893765144324906139169225887225012143883285387366088163020556116889558963741768284740305902934334806946850023570597825714830361465408561420292855043502515001498149850537134194706047165529988277670109220102766502269805527095332398862295461748072266537481745404509807754999697692445286508080110297609601749711507506133141464812431049826946597146636354781"),
- T("-0.10378317514630283035697337871092369012118223784464643078377333318832860627512487321975641507120202567300966096393096627338947655380820003149059343389474916418959764384086933825280338584080543377015355584259569741193189206873606119903440824298765910897401393832760642020478309582400187458069600297503471338694965049437285901431495005334289622152511502991672903524064211804721113695218039893263678813343"),
- T("0.87668546801298894316611272503029374001219866661666136243743380759468378098691643969637456927472038354627520673349367283367324121916949272869177620477269451717775313582362761369952753768494804335788010017359300886827719062432162897060693014847129089532263482838487347672588768501033685070780610322543843882757687187812123549700825256897742477675410408774989851342602781239821815645715958753412070397601"),
- T("0.78318117881507218281256857540210491140619166393457160009274918850278377150347503811659906527658912201560000425062426213174077300808809107842767634667207644130246300983762258813379724135069575858579484972987736881337517572218810617863132592764984653001013079710817700332509430207238192747837232227382559069149116081099363790759716765670238049577887842168907894878101742345788299501918210802461045488336"),
- T("-0.26974974384283529407135442904911380728022891803412415907499156005666362362451160206340942887714356745930732393405178421002248875485798257350416225295845333813028470892948983232570745331205136828532696050523659085855991735781739399449780199864580413509362957674310213115088541667662139444692787904342579506007770224294439456180398644394712078670122120840185549712701180444406705582313291159418160268707"),
- T("-0.99222700442041793244341637163672398376812477454144578739458582830385307501573374493329418110400264981611911650266336290704933803675752414608868505761080497715998786605323101072631863530928986865345605473152114701760347977346551445152252230086602267733482237318264916817026594817822201149718727077242483980112025554281082958570816251191650760457174817529165817706742958860474153596353298087887496342571"),
- T("-0.49918857050765127165246443100830980202323621859663295606411941969457362189652587284758726475585312743864487499288977743573076640209331558808543037798473406138898808010287039327632227491127621026484760216100025745074711422052006517238053729631745694408780163847537773119573702459176085803816861008338932982744241500509585746534632592189239382341678009278118030810458222678068124752194184440160812863357"),
- T("0.60537478588662083093550030671881062835301187704838619957445140277346831579708290170559342372438997696786583564116411747796066131598667722839502247472418892060636953054544383896701697716904288008881811071365393348940494848858720140528491631498078923089892805069340832767510592701952499233084373444894649962175905154151059310656485499518493307751028032192138975110743944975104530590939205299365402172399"),
- T("0.96833108057454018135440242001894400433450486884893467698495154667147695605198346971512860434896301677316979407715828973045999189796179033252360390253384834782428911228350312995059296512013202981214049690155973624217982618572186690629393688668380855531415343035476364485845562203330354168788849023043609092864372997506131587372974589034738683570955059234741409975711088655065542622757333229038929539614"),
- T("0.14504509334766993343679732543237665601748015028110051986903855469561805431836897592755787294803720321294196670692675860425817019156006795472544060301573514970130737237352276407965078322598196015088783620318485742726789260216376389721616761481364286097504141935673467904417287244647363440435023754573347620436961058676078531225670052103877411944831266665091545142351559495386200504307614132116833066489"),
- T("-0.85592663170679958406515397649643131309994249316454429005131578645085757570761552251729365670632975735279522675018975575836010210249068470527194075548251441076976420496548792075626757772699437483366302008026562909787676760497709271997930485538120627136230760141137536077186130465523928404376378372203755818590534658221264961808618483334189725855704258977192100851554017405085224133570406300901634686193"),
- T("-0.80835578582046670310464731711696478601773118159925609840597870029856375850957218864062941877059300809268098041286606529894870899049159003652074961379621476411176224648451902760457011220845176506086174749134555188467902316469475288975403773973857636373892326760376585744094430003550369691223550482756797212146056901318410686997010241891041855811922027651329719928389111111167862044112446757189042088046"),
- T("0.22948154144509182369415746800698328364988547396475691620681392787566104183462052622980774444304368277802870979261579895452333488316470495027443871923297117956210113575448119970237881958246782891025814249305970662163236166516394039705137544157900789683194435211763787511069822409683486532927557658412323180776903688623277362060713475574739265599518489263464320833102602215450190502358534383949241852484"),
- T("0.98619528108436834444622772244233500550001863518169392038562682097011946713614830549103565779570404766638555367268020992254689671390965312890416679706192473068433717014095521991774567755994345709131209844512998942709582638991869821050636439257597063856249038092119512871640381123843890013812838185293393263756058350072768448458950380360337889770923256206901689904823829217396801268618019194906772703227"),
- T("0.53478241597498682890636923119124507573138434225226478301997338705931821657049944750562391125304256759887391004338167587322019260365925435302391176930331161896818003746464685277508807805130884660314731429722219318699505836398912422599554793162364836595300619860913573673921432325981205409702897337053197706014049687225094538593517626884763534008626048851538197945922313231461994435494917556595912129444"),
- T("-0.57175918163121264025616107589630751551161205724757288681494194505248342228571881008866075970817690438186545379919710148119548771419260784258379302863349865022779589406640338106461807885184578720013258862884778613907350162349826641089246855371608494365729193629734711852175384638728815913727055118781471960575965215193534386589450370243853256890375165575818694142504618584610839931680003465519416417686"),
- T("-0.97787410706912947200700947809086987929552083940545236541182287303790608208610023257624198390105132776123115664110406549669787968717953162987933260638310530750565076435745587024443942712810356372635589174338356282870564205603334997652974637518927664227105047973535688395040777968082125500061259190313820373870936866720823176265958448162090987423326403872038897090958331050185525989399368410147697601184"),
- T("-0.18605618137227649584671124815631620875769157093190685600569736108086402885199167407702422320100843062616644714444408614621390574242763877642390939806307957026167805604628333909629405976831956784535026886701013223479257442178936513209253370459988519785036119662696969209506800793520534365946487576733594348627957021254017447520897947123358509837940617442852539597167693389591380189862319487892792923153"),
- T("0.83368761966098380317914918853127190012005517198095141616372457983351189700156411681039093358761555771758536229588242982647239744187242300801829995961871412772468923394414109025642424234703592018655517051393077978860068845984020869413624371103031896740117407710299198562267502869147100200858539656754317575041431701939759759225389946719106478332366708137354276007919533255169664638235639383569564110075"),
- T("0.83213248256248718391648282211236200464150938178343837417522635579213705328552770623957486792338755433958256100224720251839082676782210674078979903328623897712870422600430978907177584667709552233768475968506874004560085480509103334782228549116928850495590090914133655583767781543886956699592465303315591578411513564172526903206600594554996369316967222569167592338646796759203865876228192676690576393957"),
- T("-0.18881649076882036818094718893825891946691295900905829577570255489597056088743777799436529545269699011594065157007321752198038423373390670103253610646983030773571922979273600163598344653044825786274322207994738104766932351285365246017952816761886637102290439956065197679903357501267350062489863581450400525901254917975058272557102311416424438039867176899411547343130655797011597302924818642795986910776"),
- T("-0.97845810511310366097345864112668906661089075307983663561178996977421991305045684012227818895513901547325249161241097295038349597373820690088476031256136981855438584632935895625291791741570973153071536443895825053372019222244541345181800559983327493395843212471107951435623879503589116197386166395270332969985628390518342285544128149350904869144760786557644083102040293619728857795557725975446387638082"),
- T("-0.56945144858011886915780505911780725010620323062276283805115420871306570794972703588425077520601752861293077323301792800610549113139402646104081762175534061087117946244152125287975953108704696268847815261917377065241801643783329354778399526877290332215236634903080639679860355847620563822363712579548641527844739938293967364597110377469773489014211951212857101374318452911401420528677259991331090266005"),
- T("0.53715481965030691887397316962489853948341836449029599646266321884877186476498260019355874856809552188645630606126976563119123530724283602396484950653123503399938294688332329634386257314146589125825636097592371320563696604271190825947497633567945681092924620382686009619110102110209885034787176755762448527267043281608584015012767667899712762371285806841811102653584612955459666723163160014123341963671"),
- T("0.98572607094681400469823142383450564975177916157871840422129452719452525174019803417354200370408054482797693621385765351670173144053171524005535725427317409189868483686977845578192854125777358818593005952568285102554187813023457756929121023181880198348203083841375515867843145321766318476866476607321938993078073105088587752971311300418067382395754489252201424628686354714684325074264340586434068083735"),
- T("0.2267455177003321384894005667464998092097833850092894238480831378466683827110057043871346060005709235569800215748516185659827893723700508589640891976972716570403665692613477548038629552153079218542242417184271182264022470709072429310981387965885388758575814101891100826647083444934684812292662215448102626341015149572372707444725994248777658076421636637760492982947444020394182326376291158696727384852"),
- T("-0.81000689036588888102398287378618104836450574863713892332248232301021899106208419137911694670935600210389307190348154033680700645928539580731142634010602466147128679656911798991740456705453963764056901956423046807435258488930954638670002070774439646670450724500520094586192645160847046520311570082832431061691996839606591067443335185302732221888316818825870721496315105401624866741940813589284275695918"),
- T("-0.85447015139344948471094821054366626768019606763269341666053644333072070840260166961763856973284893831954425042860099172316086950440334996806598196522184690224018944138578542327045770832471332376269716674841615467614625539483750018876502303839670098606230317226296309325404589665701938190004997832683948796843166639576625281030300467522347494569768687089899397360725496800596493559470637547748735594697"),
- T("0.14782491492260520954264860310453392894688582499520847868449990765772811594316839506757584243129175527745236732059643506743012867347391315093605558463510078020864683057368198129858823908327097108583620570511151521896111105026538667326749527786043478669088587777236123716686756088055458828079103458534402182273835161066708126746360741813126817035007484464329141515901214558732724557437706092450180726378"),
- T("0.96902885660223213449832417965462288346382027027907788639786102888188268413128284808786908788351970794814191573322198094839000459295090920127430762740525901384778314480815531039485728089512489227948630012091333107823627672161756650613535363845597750943844039360212709462602480040358932164638277463645635101178868520058961493135889052671922314786442189473233561252419424865659925386520422456933994031412"),
- T("0.60313571428133694309325113655636540756247392441681227046917143280974317371916820972719995253248954425492897594051861535050840463205496306256237562726891289696301688567930026444972968333329934552460084325207412884738539384203738886072440013640125030433738691853586812704775040754220545555524237855361445575868855139945713834823411715711428213828850093318644478373792898000948569667301322178250159228606"),
- T("-0.50162154214905535006507934761566421365808962336874567677926739022768858180703782104157334491773507690211622144412751863172893119122904872120863946237533655183100979972269651012785895305465091942482860884709266947899655662267052604131701946158941092922207257375120965677001058006645609151579188243577188192831765423148813895489546306047297711022539509473462404019089733447430114238267379980532396311664"),
+T("-2.37609908807915949996042688873953402912174184373388399043229539427530802169622688886435380890546981798452174137747437590e-1"),
+T("8.03406366226813589517543567844755380935198206635917017883860879215939165740799963435747185200486086864198723786516760875e-1"),
+T("8.60219386510802105228997694366289682807721120146423711696179175800635220710279361583231346318224971127450760223168489952e-1"),
+T("-1.36768951513839774357595871594675554406872039078811749027554673949684004409484639336417431285061889554892096426752261915e-1"),
+T("-9.66210139195431691033548069227792927999642647449593184440815029076272297050360196975341458076547426373476590671462150981e-1"),
+T("-6.12007278553856790723803948280976098970972124581361775428331444376106018942231526074915731012122426588769327127413045994e-1"),
+T("4.91927698740873688392439262912409276430264703350691359723802294639643655296838880236042651349290074585311025856549893171e-1"),
+T("9.93232596718899824059271235487971663771012607519717340071654721877802691370866768064059943491135925674950430467047724563e-1"),
+T("2.77789911520199551017947550534057049374212876971194676010301098598339529915403722848373365985645657342475739669568931563e-1"),
+T("-7.77955945956221239101360662190442739163791527953499629555756394261998892874934847131138921705713935365505245406994428077e-1"),
+T("-8.80676278306736581575818642341143682410874043182925227659938804267878718513212454821032629378618345485453587099696563832e-1"),
+T("9.54652155963865007116798560589970996367213754762169439269792747771200843006278637115722685610960738675814993576019945344e-2"),
+T("9.54658201427917718824191302196929158303422390793460018465335986921801519149657723689322277773550748806000948225466432438e-1"),
+T("6.44358700620889799575033272322899136331490664925359198096632560532437137894857803619177106562399406351419810452110265174e-1"),
+T("-4.55304635273050571206400777159475409897339683148730716647371922365967582339285347105376503917296765204188604297021364549e-1"),
+T("-9.97202532932553753622481171186283382950122646390227670693679248197349800205205290898290539070732778341271049474946533154e-1"),
+T("-3.17489525058325500707686194437148362752290391406825231198381521862930317513649081353670386166519524315810546189268634469e-1"),
+T("7.51160186640147504067744846462384089742696250681200524524912647858645140367792164416711871535116761744380912486921554617e-1"),
+T("8.99610194168373157174515848193119670768490559799348397680196213249921436405001710937402190319584272526657508442591319630e-1"),
+T("-5.39963892484342940823660554048696208293700871414984387094529796385334086703752106515008832585578915389731907422242902573e-2"),
+T("-9.41455348900839346761557896365239742769987576963330061702397697388879776230596944312519157729410022380228287314835345969e-1"),
+T("-6.75595816763857390859268297670835380459024839344154743310231115864242050771191159334664874097564054770066166961642073448e-1"),
+T("4.17894201894880415042381733708896725748531223743344790054523182948440843948904650988733732381978194392219295696279423635e-1"),
+T("9.99447981389824371458566861195586395552622718284098766856978062347139060489410032781030191080200904443096549587568037683e-1"),
+T("3.56640095868759075150409032448421838265699043643228482503057299699740924345262819242042067863780263400092250418388628640e-1"),
+T("-7.23065426868134142613141384486526262450487633432466529798821958977732347646832059032382447792655111641456570392189752211e-1"),
+T("-9.16988391192434436877664999042786024703848714036221388727578305299843547352325574309860356272561772723624753484063972217e-1"),
+T("1.24341855683226931265962750806821531283439413068694552738675989282017066737438591268502070364982899342633928417210588531e-2"),
+T("9.26624413643579136646620112107410908114766812511471130116341925013001661546817531064974089666536893346764523464250445838e-1"),
+T("7.05664607841658050248613256866289182754229289446384595719719495272020558391145537620968819401219414243210529013148958366e-1"),
+T("-3.79761093422301890838671114556341706055562482358183402807224298533060188038450560241345615647754569347252101282386222173e-1"),
+T("-9.99965058979463689113370264378210962384824970050865061898892508056811665771886385589295806419278045318841717598003331419e-1"),
+T("-3.95173919871548266286836251448043149039940610894391718791244019288314418437411707835924620250473697245151743147215758686e-1"),
+T("6.93720251624319621941983929806434090162802383400620564454074825718151625795576680427510026452063593762417421561201654156e-1"),
+T("9.32780816819880202610269817418700102084277332259524791943833699964920012022753227823298655560837271746316929623378078695e-1"),
+T("2.91495208658083070508005579692813621670878962971611104453227900103973434149303469066898102622556226584993895360896300290e-2"),
+T("-9.10191043170480685360743788297835112117551819731152897291272407935139876953384666161532187572493791297095784055525159185e-1"),
+T("-7.34513075127503122343910106816656237074878218180284276449954797048122379869002663646507706411949095015624141821039453971e-1"),
+T("3.40971254411713599427147477626159847871020791931107106418841144080445813896332252160005593096670674809345703079384115052e-1"),
+T("9.98752871506016936810666998588493462933191829230756181478046320353377054175122206889047094521687205093218701141334147081e-1"),
+T("4.33024359542714849537532946954507232835434973891665238942502273464321666207117525270650546741831354943253652514490075246e-1"),
+T("-6.63175408268187738636594884921931867786416057472876635147295424128144233911929585327601381618059327766986981109409782838e-1"),
+T("-9.46960160806563725719808910991708075372282242401645009270517113290439792088443109178772446465191984149998211903724560065e-1"),
+T("-7.06828182905581345108929510344440443421290640066613022421187316650733628538705972455891575947230299102119854983197703150e-2"),
+T("8.92183656127948379886438402777950080111433733329436790239129260607557296960582455582584117031260710927499215646838011844e-1"),
+T("7.62091330231640362984555508176991632755732840163230620595759320390970951235395195394649584713540498911356433919369698423e-1"),
+T("-3.01591765120371930643555588643712101466544136366607065361801475091335195383846047491935017919396438040414024941341524187e-1"),
+T("-9.95813515236177554177387795413035497724212540625760091518605741283184405719984044075159457509720410668598540884613985023e-1"),
+T("-4.70125959152223022135690700550251564040118601846181392455764893020377582359429013073566263451488554529709131439092909247e-1"),
+T("6.31483718775865440843182928017874708719203714677143270278178885379757350754752477512514449375355491054871712891789652146e-1"),
+T("1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+T("3.87481045630097871028201331640164477694000480353342897357083794605539506785023570062767753819472037935010414476627195076e-1"),
+T("-6.99716878554812023132822640034166338740077082416915046841339368979161296335086955803240899441098534898926193252558848693e-1"),
+T("-9.29735101124991407032113033015438177585645722877060262785796302722011806301680288369763295777635760805579255008366302180e-1"),
+T("-2.07925797310208845709174899248298159909010721767168338004516304026594885686024530923209628704670627250569637267490913462e-2"),
+T("9.13621640053945104047985280883096238900189007462190433514805702721127019097915088259906184736442916334750420359005079959e-1"),
+T("7.28814716527795995795780587639833705107995825167970668466246348938821997240383021826681253777014938636567626203524137506e-1"),
+T("-3.48817863192357573536083313907744269588018702862402502601699983054718835012048372083235768555953613790431700360695537918e-1"),
+T("-9.99135337256258278958854200595331742602280601557283993231562055717063052179292021052372510863057206152466386086657442382e-1"),
+T("-4.25474147219713305654097901385832164424798803616095278869643928816776198489330071073326518019520590535564717523756486665e-1"),
+T("6.69409002349720857726983952566596052122726437391092096671257338244059819036586172017092390651026654050631669646310910927e-1"),
+T("9.44240747589054266930136705015787520728797286842746645573763175559132491628984502333043316023599487896169049499868916865e-1"),
+T("6.23417820549832676844933182722733277887833220127638406914080428946880981800946578131712749910941183940944526141109771339e-2"),
+T("-8.95928229794837090592434136137683839101829890460754766346170956577979909285084363961363023377587044303560652568203578379e-1"),
+T("-7.56652196635835430995109388017590459596111729342964992503572530290981857981790620732129221157071082788019187787999930361e-1"),
+T("3.09551461133309219674309651201007026752336319933918953736299690287371505733386433918863300129026763968979930342098019300e-1"),
+T("9.96542844308353945757715814452637400116215448012622700698887257177706625278927018059066920597035660000571997275705962011e-1"),
+T("4.62731465522276407764000677957978862104808823938378826581864482071733508960062598574638347814740748458034065235894523010e-1"),
+T("-6.37943500095315456672541800050589670140910744260281868746767523730582697622604545933849801882909439609368258115114388202e-1"),
+T("-9.57113494461990955768932962010819183910065445494138937651443249061391692258872250121438832853873660881630205561168895590e-1"),
+T("-1.03783175146302830356973378710923690121182237844646430783773333188328606275124873219756415071202025673009660963930966273e-1"),
+T("8.76685468012988943166112725030293740012198666616661362437433807594683780986916439696374569274720383546275206733493672834e-1"),
+T("7.83181178815072182812568575402104911406191663934571600092749188502783771503475038116599065276589122015600004250624262132e-1"),
+T("-2.69749743842835294071354429049113807280228918034124159074991560056663623624511602063409428877143567459307323934051784210e-1"),
+T("-9.92227004420417932443416371636723983768124774541445787394585828303853075015733744933294181104002649816119116502663362907e-1"),
+T("-4.99188570507651271652464431008309802023236218596632956064119419694573621896525872847587264755853127438644874992889777436e-1"),
+T("6.05374785886620830935500306718810628353011877048386199574451402773468315797082901705593423724389976967865835641164117478e-1"),
+T("9.68331080574540181354402420018944004334504868848934676984951546671476956051983469715128604348963016773169794077158289730e-1"),
+T("1.45045093347669933436797325432376656017480150281100519869038554695618054318368975927557872948037203212941966706926758604e-1"),
+T("-8.55926631706799584065153976496431313099942493164544290051315786450857575707615522517293656706329757352795226750189755758e-1"),
+T("-8.08355785820466703104647317116964786017731181599256098405978700298563758509572188640629418770593008092680980412866065299e-1"),
+T("2.29481541445091823694157468006983283649885473964756916206813927875661041834620526229807744443043682778028709792615798955e-1"),
+T("9.86195281084368344446227722442335005500018635181693920385626820970119467136148305491035657795704047666385553672680209923e-1"),
+T("5.34782415974986828906369231191245075731384342252264783019973387059318216570499447505623911253042567598873910043381675873e-1"),
+T("-5.71759181631212640256161075896307515511612057247572886814941945052483422285718810088660759708176904381865453799197101481e-1"),
+T("-9.77874107069129472007009478090869879295520839405452365411822873037906082086100232576241983901051327761231156641104065497e-1"),
+T("-1.86056181372276495846711248156316208757691570931906856005697361080864028851991674077024223201008430626166447144444086146e-1"),
+T("8.33687619660983803179149188531271900120055171980951416163724579833511897001564116810390933587615557717585362295882429826e-1"),
+T("8.32132482562487183916482822112362004641509381783438374175226355792137053285527706239574867923387554339582561002247202518e-1"),
+T("-1.88816490768820368180947188938258919466912959009058295775702554895970560887437777994365295452696990115940651570073217522e-1"),
+T("-9.78458105113103660973458641126689066610890753079836635611789969774219913050456840122278188955139015473252491612410972950e-1"),
+T("-5.69451448580118869157805059117807250106203230622762838051154208713065707949727035884250775206017528612930773233017928006e-1"),
+T("5.37154819650306918873973169624898539483418364490295996462663218848771864764982600193558748568095521886456306061269765631e-1"),
+T("9.85726070946814004698231423834505649751779161578718404221294527194525251740198034173542003704080544827976936213857653517e-1"),
+T("2.26745517700332138489400566746499809209783385009289423848083137846668382711005704387134606000570923556980021574851618566e-1"),
+T("-8.10006890365888881023982873786181048364505748637138923322482323010218991062084191379116946709356002103893071903481540337e-1"),
+T("-8.54470151393449484710948210543666267680196067632693416660536443330720708402601669617638569732848938319544250428600991723e-1"),
+T("1.47824914922605209542648603104533928946885824995208478684499907657728115943168395067575842431291755277452367320596435067e-1"),
+T("9.69028856602232134498324179654622883463820270279077886397861028881882684131282848087869087883519707948141915733221980948e-1"),
+T("6.03135714281336943093251136556365407562473924416812270469171432809743173719168209727199952532489544254928975940518615351e-1"),
+T("-5.01621542149055350065079347615664213658089623368745676779267390227688581807037821041573344917735076902116221444127518632e-1"),
    }};
 
    T eg = "5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1";
@@ -154,12 +155,12 @@
    {
       static const T euler_gamma = "5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1";
       T val = cos(euler_gamma * ((100 * k) - 5000));
- T e = (data[k] == 0) ? T(ceil(fabs((val - data[k]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val - data[k]) / data[k]) / std::numeric_limits<T>::epsilon()));
+ T e = relative_error(val, data[k]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
       val = cos(-euler_gamma * ((100 * k) - 5000));
- e = (data[k] == 0) ? T(ceil(fabs((val + data[k]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val + data[k]) / -data[k]) / std::numeric_limits<T>::epsilon()));
+ e = relative_error(val, data[k]);
       err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
@@ -229,7 +230,7 @@
    {
       static const T euler_gamma = "5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1";
       T val = cos(half_pi - (euler_gamma + k) / 523);
- T e = (near_one[k] == 0) ? T(ceil(fabs((val - near_one[k]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val - near_one[k]) / near_one[k]) / std::numeric_limits<T>::epsilon()));
+ T e = relative_error(val, near_one[k]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
@@ -255,7 +256,7 @@
    for(unsigned k = 0; k < exact_data.size(); k++)
    {
       T val = cos(exact_data[k][0]);
- T e = (exact_data[k][1] == 0) ? T(ceil(fabs((val - exact_data[k][1]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val - exact_data[k][1]) / exact_data[k][1]) / std::numeric_limits<T>::epsilon()));
+ T e = relative_error(val, exact_data[k][1]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;

Modified: sandbox/big_number/libs/multiprecision/test/test_cosh.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_cosh.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_cosh.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -10,6 +10,7 @@
 
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/array.hpp>
+#include "test.hpp"
 
 #if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
 # define TEST_MPF50
@@ -104,13 +105,13 @@
    {
       const T x = eg + k;
       T val = boost::multiprecision::cosh(x * x);
- T e = ceil(fabs((val - data[k]) / data[k]) / std::numeric_limits<T>::epsilon());
+ T e = relative_error(val, data[k]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
    }
    std::cout << "Max error was: " << max_err << std::endl;
- BOOST_TEST(max_err < 1200);
+ BOOST_TEST(max_err < 2000);
 }
 
 

Modified: sandbox/big_number/libs/multiprecision/test/test_exp.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_exp.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_exp.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -10,6 +10,7 @@
 
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/array.hpp>
+#include "test.hpp"
 
 #if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
 # define TEST_MPF50
@@ -44,57 +45,57 @@
 {
    static const boost::array<T, 51u> data =
    {{
- T("1."),
- T("9.4774758759621877024211675170518456366884502921505415491512637467314221915954853431757689726613032841249599156149038435317513116309445221664968991934479367736962368912070497862135887440758964938422498610719192114666493107120133053433933470080716434904854804591983841381870449665144170011709399012693158566138960223723364102555657731121349862591746773752353141675856300389702807704522952296232409058995e76"),
- T("8.9822548979445237099762393639075561506833309483454509238768979587574644012197081949903511127689329087920328909235374785049128571553031890973238724279779592658729244759890277209350767466719784199679796679076195510817453034019585841414276969807276603422838152196159579020392165208404938697706742432405072185394955217454998873094186010667116964062108348411120353180844989880619261736047981860732797930644e153"),
- T("8.5129104107012425752479825179539835555229492815662784863307311391672159207488925610548399363157976134510028424514441050609545913878842822386467301206413201029623476769026205205033685817764924800488232855250724008684495915251712280130842326233108250199883461186105839257510617980635806077595457588382413118792469142952313318664506759914894358735407111388609445312410411768354469087810933243701518863094e230"),
- T("8.068090305164838604842549259891290171124821324687615632762765947633748868268417454336601924388552143324691924117594027902831510205350887969459808981202607973311868683121411298688279975061789109893607155133896078457388071886309741456291076644788440713510519219662121306330169119711707661687366546188062768141595534496102806873207221787877336040297603480708540379623897605936160066148763011880191621869e307"),
- T("7.6465131232284163049316971133689488893295181895713899732751818669118734787914222264428338943260471340902326391726435840091710708695473968075461348860956049684669812738873320847453110965340325334947107583391780473997991426818290712114444252407495208024999404559898062464415917818325137468413597347923471238518514205589873079135934550659222795036544923795379322078022614498712288611880678752777952015152e384"),
- T("7.2469643660625598538019258566517379445511821515071121090548187005319333633673122846436747032786828698818049511140660969044546275219845755939273078671198074959632409619498154244698031034440156360197935648334627868546857888857494388700626844388689389822377033582839158752694909185487984346545185318857120307481828458998400770240716997943805543726689069264680883497414036698656007667489582007899001829547e461"),
- T("6.8682929953315519748061086577140456531398698780106027012062193513974157724673145902422782875956445003426789107235281687028397040131570497762100824722937078427155330107861397918035390454699657109557435638021678699307825502445861009401889929556587580492784546438388738373098175168819944606997023434060917962050793068854615280653706806955349426233710968944941108524201897185239272184650924550094159165184e538"),
- T("6.5094081172294858524266967236074125271501239931616451822606100184551967070123942960365792762875516947968906251960679962384234952003522496976521459488146737312705400397630193900773373659538930712803305054506593414261773420168174852358519629345494258520616169148118576343286498482213483702930624725613384454163670114665649516148482263466492457979074135245336808430956247276655511233636218374141666023272e615"),
- T("6.1692758397834896445466565257129421525132737513712327204187797947854551109008575685822530235797715953977744784785550340516715598557366923302859690730271083925820960776432604991610505575079802877181530212126674968757212631217826462154883556827312493006938669407561453082743084716913350560632423093917610154998589982600001382392313694022445670347030705319164552170150291848012351937100953890036300105871e692"),
- T("5.8469162943704389675386957200432422884983339114040809517125791843529698266123366406953460141383587627250027572569096847362363831549584856898467181999391413025165420386358087621054569033111477610047027055333381725754117391518041977019653549862107958916803866421362184761931585219445620128589637254918343555371393128431807715170682738452071618887807426604132681626154765999537959315476068213542621180322e769"),
- T("5.5414008128666064583537076240692868933072418197965454555020420111392626928160330156411498052861994284073777041588578343924444729815070056061660603933966757946018263861283152733720240516173400789600385493382166372543010812180148374708916504088803663809915284719654025586373106511403877362732360653577732630088912763232117614936657631128626622480330571961457177097015572841013819523862056676302123590835e846"),
- T("5.251849252298052001849336634596605624932615050587242126709230836437099642948552827155317681622985673796485738044339684860221300378963566030058095552267153924938244515158005499605803770525751057401451830019036344558051163875818942505974131107483204115256933385945743955379487500587051829522367096042702717218823641765552373631712919055254215952997997242218608413439149796128454371169305737207513128807e923"),
- T("4.9774274592844840922553532523399895707687997944019016434779659339099599495175571066749191102647610895707050400315564576144486939330191822264020831239376081750240177080224855259905972322795436336044718080591030837173922087243357258882189147341298494439853073189728114774501846930002388008365636203966891211742478022416179489779372415512232819505675629656011956781715868427072593283654666589611808073581e1000"),
- T("4.7173448669720462237188351865970295455238511572394280863649015756105641752582788447957398889951756658763666977964561080316844537247511176975067430907677318411628894592131659609314519705065696036773840172243882880973707032036317239517638220758446197062685014773982890420289865519060688689357420655259758455221621133987780001331686741987234669397265361446155200793231408284664030082289902730362397848561e1077"),
- T("4.4708522175321623603760234543012160551233097542464376709898701080016161641305114803775155211008103406608130900779618211357983931505100150872036597773168012401952663951774811462178950982356754934520420952750636967336804589186617110996219414674248378823188434472686833719446877071963169624353004701806734777657062069056499506562750389037932975870328903604743080312421901044848764763554120280608069622747e1154"),
- T("4.2372394036653119830098671356758800877704381245840070556972166015743494177406662087025674510726553612407773483679793826805395046830522912774907458645315666657109679555711516123219895337097780310478450990346378570451984628571968728862717021688464671183102216087482134582783233462788612276436433844843113340117661068800967697425945952185565756591509948286825746552902121339188076398953061591657510445066e1231"),
- T("4.0158334228914400539745590178164794975437536606699818222034254004811114067672490994749378759633661049912208598371211928081486311385567301424145253923797915452955822482631387668888916584389521441919397036718125302432512547147127924813280974253855801042782701987819292329831163944563371019697555352578545825707188652122309957602602328073674784142564935616256457537057261596233390671696504290741500824325e1308"),
- T("3.8059964387336281390030628447736918731950638905889859981670562575013579651080893378643261418615597248563793905721216409752849171768325689975193281668646707475626612103018049529414972031338274254587787676115938524624210494070325582923806604462125023016462957768718261849099968552115528194693187665051765401859680442459296615169707213689087378346661673375123735787731940984618937841286808679717684045601e1385"),
- T("3.6071239432095959207430930181651037268769528665018877695729199475196601891740487861223796136712863819929038760151135883635004445484745979300525669576636222972289788167180919942439736319800034914890005316195880400774555618160525047519091232763877112549157224779431406160698065686340819410841933246641650269061746492965033484737240772388735312991521074123198706383278511433856343165625103198269467277045e1462"),
- T("3.4186430153374545706606299190728926303831987493039531531525792716113836020659611610272471306951869724846396516471297290706571995664799809535296646907832639466194597092728987006624017784246439039721439649240230770188576832674257817653601012003365792748252816491311084472983584896236685446078049796997495088275235014482876422624572733765422511563417424717976734285541485840205576333292292629705898026712e1539"),
- T("3.2400106706387356945670320428646200776993383104555861757828941469924476740373605793183477572742076241032829759659681490962141240145141581865097423924646660398220529435794134651336421615115538294144878610322957162996489151882559706577258950380659727211777291935939480320782190247511227788798308670601955093205987496538797636913777784465756466432434857195432171054628069149765836567108796606518876161411e1616"),
- T("3.0707122968838686808762365976116630656317083977116234783051460697759202764413714416029446981398815846396774097846142086219585484898425128945637835965609311626781498745013601665202311991073858493014761614369526954113562966924343632898676526247434944353812116870344357416617678601015459053297989079589299509864871767253387806087559388044642587983434307487581273247444950986227978405821984630380335522999e1693"),
- T("2.9102601715737304709407721855237845605215030467786367061140857045899101530013173126178764480141553804302726818509771061464761826116800985901969508353958187973711321043157119127861178260598364278447637770099918746816176840436194047559028684276346030463240065993810821297209992114976352565659256401456824943396501998104720348581392556524094012469848383344186510494751840542956622168648051127134605419049e1770"),
- T("2.7581920568863607870027917438011158114732314795167030242749419621017647849448607372158405505948973604056597946655107017870542301435918693041804847351891423642078041222831042196395295270728440674479791111077414832394734353235316069842707878669474381815671796103458710433178002392178092638286037259141627485462419803958568427330260813821541600701534519737633707025577914995456788692103051108422425375408e1847"),
- T("2.6140698680411010453416773970464335103997599275990557963505882402750774237538007727638017837647068698785550358186768104621786728298395959017968646659450681758854495815775051287976515457472752962763600118692278131638936053170621574407487878235430394106909122081064770622396768825200987517033934258510550698555707917420074884651382528854596786633229647900291304513978131386770725311082555006911467864447e1924"),
- T("2.4774784112439194545961900234630392526964078574399033336208722389562768176981620423625796094049751937688183037372271145640392552111592856112971332411543527668988982189213357069766999642690629174087636518790443153236463649626796203655474042490645756106046469120382604539074502111722789325269571247140534108791736500356851939956197404652273603941323630209215720013693452205022518765760329070842616941046e2001"),
- T("2.3480241875781374631691380066790792771892564869650825534762414159728147468382334513664061092463982019282596608230957530311211307328143974085747420399537158037724095218243991423228023444859379580883072434670530040478491744472651118485401814194033214517221050352934587398275852096346826910101105240186236412184656659382535831384647508927079089332738325920621748164698159861195345140124576533260099531818e2078"),
- T("2.2253342593947512482894343051033346460553514685284868064761586762995307539088982139722858486639592417618934607300618026000707839555068686077050219383701773511012374743383996188227317471958686041947524249098686209176989223885354176417280209218097978029585985115430634192732411379059159347252165834440501107479076728537702323035968171445551276815488702844227415317075032577967598705531043548190902240163e2155"),
- T("2.1090551759365936315455394763107180892546255311406814474807735913225599344136347904154067215849740466098616361782897296314219278981058583564722586146448606213894635847184726562609032113220295749441955633109205157660265084141265451792574855174504712050982199997333601700242161381263233947649564996752502282300661121812212460958677667464307539559824119716390823776389116062024328503582458296404661030724e2232"),
- T("1.9988519551012253626665391606414160629542055458014061990042537070247177860439177457869686789999953426516957430680890680964654190474258046504015466343786427551666546734635351226235742257396796694133189981279578839780058454761985247524191011603418127443226153000194710273722264940047399226885184129896957721196752811974521300721776877014427959949663663916026486491804231252409445050163051004298903230857e2309"),
- T("1.8944071184091717327769157288694214491666404740796335627119828665408788464610207014827128441011823347031833774554689560285831180446909490973719926278454999562091766786964617295311248054209296251829365565657637585794799613184943543642149302253502921625588487967178044987717063245419475512579228948005151251220172269440562559442067650076109382783512605616677262078725150593936302571039602645533145833688e2386"),
- T("1.795419776397396870883759116489769402541419469341753006054859662887039319928613872577712647027984056309170986725948997439220662114370977055801553872855064859465160778064610757538797519726695741862251510315436821959386698539808251950372887792620010350735505164024826909107013909479283953771859666151170337965452357673457347076929518296009792647791360547551255623795595827532506478122285622521680723198e2463"),
- T("1.7016047618031754086134654579111810617120348758710143771069305417445489516040399750813776000705885685499141312138983442910516360247333185628492894202543743484367527766696250509432364995620305699351629185845681107616307847503246334638085810705895758535310625200703209004562084637734409371699916561240290054446464424202718339701400783109986719573562903857763873129540597357986671423745013710023231651329e2540"),
- T("1.6126918080411979609715701452747988352165611850041775296367567768434358897691585163763723200113910842065988232661477200356230494761269971912897846125539659247231849257562594838887825972384334125491030803473533770400171029646043156961751894914511918427584075989532586054167207076781379343029365612771751032986978351517889027305091647604463730801257161289620542661422918279902166096709193161081148394122e2617"),
- T("1.5284247706072296906699846404669034984154826955667742337840818347648901587881658504557814138346370867446936528153779291440974222875392035177334798180491517730019043230270100162475021422595011732593995371616778833697035670363475607783524853038032682034425785665657694174408203262209215616997795015596310706005669556487099297258112136814894205842056567712320200105413268352722573109566950626278687930372e2694"),
- T("1.4485608891653060012262662362934733670202669964729350005811103752638169264554793857733858200215714810347904907192143845165275567906538821978702789157309454852049290295796799965552485868312721404394594588565776908022341972957647259592625133676589615774282958675900831935353271514314162851566868342929429856058517618472279436082944777949290121160320329701032110206134281440294897812652040954276090507017e2771"),
- T("1.3728700881926523987377787943233319240491435703774938014541289523016635231812897840380838214278403055812374826352836064462692100642008102237346834361992329341687329019897351648991658099511836287726680508579879561481258870568846143059698287552784017902374151003189575311983375350280503953688511659632273800604956059446835976326153862663879531247057664632472283459374059559730646129713043045914280036191e2848"),
- T("1.3011343141675944177179012805391104090720749087989014559756238032895645009279901485614947480934542467295834329661576448972096487118616044389963400689819864304760083535444189376011062378910379399366999838002995455575533727570818112349042088887223540611741471886797668792340331999553880029276216552340520965077802458183989229739403020238639120027067012696404307310649637683517662985846874429681252694077e2925"),
- T("1.233146907390998223699634116604196321303527338063194018635704429203476960154098702362306563055636743760637784824497167438582308977860508068061535923688719183483752799354995864650650838160287374006896203951016533958052684442079538436867039485265319300786722392487965089753674979550869797200905652353584841188368624722200329909417714522575076225901000950862809939580119622301038231535752640718531560503e3002"),
- T("1.1687120066315563646851448403936869404385185807787910322183199726441909641701499694514314549503826524393274595370652625335780618101237045988306992211747149512692179708353068119406926898226236555424247858876734064642321276408994327805695378682350680381138120637976561992552983027128491109399057399204806734536960608717759169335403208815710861794231703278779715979117164411304050798514670593787652928186e3079"),
- T("1.1076439848797935780459011708913459693873418501614440121893411516856155264044888921508915048116297777621412439748701311029558308262037962091076982761455032906089728939898793892875302522325111709336468475276025046431105649997619822361542676063571655376547693673809133715806114929084161165591159275087382589295164718676930405790416367425834825705001722880024431488182592089567213871253363437453881724614e3156"),
- T("1.0497669145852869831822072985740561681644437400018209440593094671016875295492661221847443008152631201881081765740915849038613188076178075126640018128968505236614758225634907922757204588825919348747289334952559508285340900441213069663101271469490908846474748126491486153897933707558113462272399019590825684419149149971088390644736001969102418531930304048460671867178170486969430030044866749941411652221e3233"),
- T("9.9491406083653158286834756917422021600764727853686312719802358420566982531788421914469238540915616504216223401740335370367923898274605089490332650511788075886198714135795808528419557141582217964579360685402741569208063074313253490838482414281367060197950065504143914001338572155467333984661503453898847902871372714795379743025547542723839248318892138759596907306100969830936341255021634987471789706941e3309"),
- T("9.42927401023380446961314339401657458785389811652244742482194123119943160577946366372207045050095290781679375214307398843926493195734487944624333413228893399732976728321980799677091653454804065271499274601941255651159823827574140068157063214410760869314717732028275496245648005191215048930881016330693755275282258597115402181603925122663256538590166426964332556533036059527784227962722441198371434037e3386"),
- T("8.9365716959828116465632229827533775010309573979010794366666818430433566556286774474031057786888009871925254918684981245088107384317036889752292156920146379694165987770273470926340201197874812456173862271880689137375502421735431888891334269040972307308842443051934967463204037988999112477683156448819368015441070611711599827182978835927951062291039453298334013800388495719125476482150507255562932471987e3463"),
- T("8.4696142662483591182651710363149061965529671414187214114508986504580419620532836415592194561692587545892671733647852519586965260182156246891106882514113059675737245160959965677478337885852837584798963994305283509311992268344932659689149044725278268851178262071743625689593833327527427790889142934871390124497847187559769333723286181059355730422352609633594972880679988434632727829633392971196615348162e3540"),
- T("8.0270564887074008992929481581600294386090831745459505539216873340458312207422342705431057237884163498424349206319209533661302797554406960728685696384646157216820308811030692783501496335637205341645641865876987704911724172887422201095488046489024482854111274279939733922390803256997868575641148291588995771500671739181954270612789001072297006035844811068998273723866529350060897658557177391069889428138e3617"),
- T("7.6076234226710136997076519198854581037482480050087592375273646746765716709802670790534160394910843369630438334623933329715061433126854176918572680591852491900095968421410826840041652944667732505393218836407650478812322026068521739096553158504199794298343738853325452463396386800405102937609865179610358195390467842398985491405704400439203254032406556044023342935195219037071893174834506422022272020608e3694"),
- T("7.2101067461769422102719046864935900042020946053983858930538783546380741670622477730299778929732944630854151363803543748221329578582604770541719603126349873057195532110292846743563791049380608460124840094825775295226949060515234109528775156283010154878061758953690404860422160965162770534213586973008276804840802176466270909812402590547626695704877606695620372290113893333718784454195491413120278571381e3771"),
- T("6.833361275000419432343650592319686694062674227594429857464606108305032877344799885305123090652406787997867592503236607009836687444829395552541403634550659710745653974928907350064693400553697943529341780925791186120102910163514753761188563821153759960369188532092163964559115206212975793696371318151500479047238166891574507004736959512033943570963451048752039151427991562182278434585245918970979972925e3848"),
+ T("1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ T("9.47747587596218770242116751705184563668845029215054154915126374673142219159548534317576897266130328412495991561490384353e76"),
+ T("8.98225489794452370997623936390755615068333094834545092387689795875746440121970819499035111276893290879203289092353747850e153"),
+ T("8.51291041070124257524798251795398355552294928156627848633073113916721592074889256105483993631579761345100284245144410506e230"),
+ T("8.06809030516483860484254925989129017112482132468761563276276594763374886826841745433660192438855214332469192411759402790e307"),
+ T("7.64651312322841630493169711336894888932951818957138997327518186691187347879142222644283389432604713409023263917264358401e384"),
+ T("7.24696436606255985380192585665173794455118215150711210905481870053193336336731228464367470327868286988180495111406609690e461"),
+ T("6.86829299533155197480610865771404565313986987801060270120621935139741577246731459024227828759564450034267891072352816870e538"),
+ T("6.50940811722948585242669672360741252715012399316164518226061001845519670701239429603657927628755169479689062519606799624e615"),
+ T("6.16927583978348964454665652571294215251327375137123272041877979478545511090085756858225302357977159539777447847855503405e692"),
+ T("5.84691629437043896753869572004324228849833391140408095171257918435296982661233664069534601413835876272500275725690968474e769"),
+ T("5.54140081286660645835370762406928689330724181979654545550204201113926269281603301564114980528619942840737770415885783439e846"),
+ T("5.25184925229805200184933663459660562493261505058724212670923083643709964294855282715531768162298567379648573804433968486e923"),
+ T("4.97742745928448409225535325233998957076879979440190164347796593390995994951755710667491911026476108957070504003155645761e1000"),
+ T("4.71734486697204622371883518659702954552385115723942808636490157561056417525827884479573988899517566587636669779645610803e1077"),
+ T("4.47085221753216236037602345430121605512330975424643767098987010800161616413051148037751552110081034066081309007796182114e1154"),
+ T("4.23723940366531198300986713567588008777043812458400705569721660157434941774066620870256745107265536124077734836797938268e1231"),
+ T("4.01583342289144005397455901781647949754375366066998182220342540048111140676724909947493787596336610499122085983712119281e1308"),
+ T("3.80599643873362813900306284477369187319506389058898599816705625750135796510808933786432614186155972485637939057212164098e1385"),
+ T("3.60712394320959592074309301816510372687695286650188776957291994751966018917404878612237961367128638199290387601511358836e1462"),
+ T("3.41864301533745457066062991907289263038319874930395315315257927161138360206596116102724713069518697248463965164712972907e1539"),
+ T("3.24001067063873569456703204286462007769933831045558617578289414699244767403736057931834775727420762410328297596596814910e1616"),
+ T("3.07071229688386868087623659761166306563170839771162347830514606977592027644137144160294469813988158463967740978461420862e1693"),
+ T("2.91026017157373047094077218552378456052150304677863670611408570458991015300131731261787644801415538043027268185097710615e1770"),
+ T("2.75819205688636078700279174380111581147323147951670302427494196210176478494486073721584055059489736040565979466551070179e1847"),
+ T("2.61406986804110104534167739704643351039975992759905579635058824027507742375380077276380178376470686987855503581867681046e1924"),
+ T("2.47747841124391945459619002346303925269640785743990333362087223895627681769816204236257960940497519376881830373722711456e2001"),
+ T("2.34802418757813746316913800667907927718925648696508255347624141597281474683823345136640610924639820192825966082309575303e2078"),
+ T("2.22533425939475124828943430510333464605535146852848680647615867629953075390889821397228584866395924176189346073006180260e2155"),
+ T("2.10905517593659363154553947631071808925462553114068144748077359132255993441363479041540672158497404660986163617828972963e2232"),
+ T("1.99885195510122536266653916064141606295420554580140619900425370702471778604391774578696867899999534265169574306808906810e2309"),
+ T("1.89440711840917173277691572886942144916664047407963356271198286654087884646102070148271284410118233470318337745546895603e2386"),
+ T("1.79541977639739687088375911648976940254141946934175300605485966288703931992861387257771264702798405630917098672594899744e2463"),
+ T("1.70160476180317540861346545791118106171203487587101437710693054174454895160403997508137760007058856854991413121389834429e2540"),
+ T("1.61269180804119796097157014527479883521656118500417752963675677684343588976915851637637232001139108420659882326614772004e2617"),
+ T("1.52842477060722969066998464046690349841548269556677423378408183476489015878816585045578141383463708674469365281537792914e2694"),
+ T("1.44856088916530600122626623629347336702026699647293500058111037526381692645547938577338582002157148103479049071921438452e2771"),
+ T("1.37287008819265239873777879432333192404914357037749380145412895230166352318128978403808382142784030558123748263528360645e2848"),
+ T("1.30113431416759441771790128053911040907207490879890145597562380328956450092799014856149474809345424672958343296615764490e2925"),
+ T("1.23314690739099822369963411660419632130352733806319401863570442920347696015409870236230656305563674376063778482449716744e3002"),
+ T("1.16871200663155636468514484039368694043851858077879103221831997264419096417014996945143145495038265243932745953706526253e3079"),
+ T("1.10764398487979357804590117089134596938734185016144401218934115168561552640448889215089150481162977776214124397487013110e3156"),
+ T("1.04976691458528698318220729857405616816444374000182094405930946710168752954926612218474430081526312018810817657409158490e3233"),
+ T("9.94914060836531582868347569174220216007647278536863127198023584205669825317884219144692385409156165042162234017403353704e3309"),
+ T("9.42927401023380446961314339401657458785389811652244742482194123119943160577946366372207045050095290781679375214307398844e3386"),
+ T("8.93657169598281164656322298275337750103095739790107943666668184304335665562867744740310577868880098719252549186849812451e3463"),
+ T("8.46961426624835911826517103631490619655296714141872141145089865045804196205328364155921945616925875458926717336478525196e3540"),
+ T("8.02705648870740089929294815816002943860908317454595055392168733404583122074223427054310572378841634984243492063192095337e3617"),
+ T("7.60762342267101369970765191988545810374824800500875923752736467467657167098026707905341603949108433696304383346239333297e3694"),
+ T("7.21010674617694221027190468649359000420209460539838589305387835463807416706224777302997789297329446308541513638035437482e3771"),
+ T("6.83336127500041943234365059231968669406267422759442985746460610830503287734479988530512309065240678799786759250323660701e3848"),
    }};
 
    T pi = "3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609";
@@ -102,19 +103,60 @@
    unsigned max_err = 0;
    for(unsigned k = 0; k < data.size(); k++)
    {
- T val = boost::multiprecision::exp(boost::multiprecision::sqrt((pi * (100 * k)) * (100 * k)));
- T e = ceil(fabs((val - data[k]) / data[k]) / std::numeric_limits<T>::epsilon());
+ T val = exp(sqrt((pi * (100 * k)) * (100 * k)));
+ T e = relative_error(val, data[k]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
+ {
          max_err = err;
- val = boost::multiprecision::exp(-boost::multiprecision::sqrt((pi * (100 * k)) * (100 * k)));
- e = ceil(fabs((val - (1/data[k])) / (1/data[k])) / std::numeric_limits<T>::epsilon());
+ }
+ val = exp(-sqrt((pi * (100 * k)) * (100 * k)));
+ e = relative_error(val, T(1/data[k]));
       err = e.template convert_to<unsigned>();
       if(err > max_err)
+ {
          max_err = err;
+ }
    }
    std::cout << "Max error was: " << max_err << std::endl;
- BOOST_TEST(max_err < 1200);
+ BOOST_TEST(max_err < 5000);
+
+ static const boost::array<boost::array<T, 2>, 10> exact_data =
+ {{
+ {{ std::ldexp(1.0, -50), "1.00000000000000088817841970012562676935794497867573073630970950828771105957980924149923657574337470594698012676100224953" }},
+ {{ std::ldexp(1.0, -20), "1.00000095367477115374544678824955687428365188553281789775169686343569285229334215539516690752571791280462887427635269562" }},
+ {{ std::ldexp(1.0, -10), "1.00097703949241653524284529261160650646585162918174419940186408264916250428896869173656853690882467186075613761065459261" }},
+ {{ 0.25, "1.28402541668774148407342056806243645833628086528146308921750729687220776586723800275330641943955356890166283174967968731" }},
+ {{ 0.5, "1.64872127070012814684865078781416357165377610071014801157507931164066102119421560863277652005636664300286663775630779700" }},
+ {{ 0.75, "2.11700001661267466854536981983709561013449158470240342177913303081098453336401282000279156026661579821888590471901551426" }},
+ {{ 10, "22026.4657948067165169579006452842443663535126185567810742354263552252028185707925751991209681645258954515555010924578367" }},
+ {{ 10.5, "36315.5026742466377389120269013166179689315579671275857607480190550842856628099187749764427758174866310742771977376827512" }},
+ {{ 25, "7.20048993373858725241613514661261579152235338133952787362213864472320593107782569745000325654258093194727871848859163684e10" }},
+ {{ 31.25, "3.72994612957188849046766396046821396700589012875701157893019118883826370993674081486706667149871508642909416337810227575e13" }},
+ }};
+
+ max_err = 0;
+ for(unsigned k = 0; k < exact_data.size(); k++)
+ {
+ T val = exp(exact_data[k][0]);
+ T e = relative_error(val, exact_data[k][1]);
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = exp(-exact_data[k][0]);
+ e = relative_error(val, T(1/exact_data[k][1]));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+ BOOST_TEST(max_err < 10);
+
+ BOOST_TEST(exp(T(0)) == 1);
 }
 
 

Modified: sandbox/big_number/libs/multiprecision/test/test_log.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_log.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_log.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -10,6 +10,7 @@
 
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/array.hpp>
+#include "test.hpp"
 
 #if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
 # define TEST_MPF50
@@ -155,10 +156,16 @@
    for(unsigned k = 0; k < data.size(); k++)
    {
       T val = boost::multiprecision::log(tenth + pi * (100 * k) * (100 * k));
- T e = ceil(fabs((val - data[k]) / data[k]) / std::numeric_limits<T>::epsilon());
+ T e = relative_error(val, data[k]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
+
+ val = boost::multiprecision::log(1 / (tenth + pi * (100 * k) * (100 * k)));
+ e = relative_error(val, T(-data[k]));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
    }
    std::cout << "Max error was: " << max_err << std::endl;
    BOOST_TEST(max_err < 10);

Modified: sandbox/big_number/libs/multiprecision/test/test_pow.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_pow.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_pow.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -10,6 +10,7 @@
 
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/array.hpp>
+#include "test.hpp"
 
 #if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
 # define TEST_MPF50
@@ -550,11 +551,13 @@
    unsigned max_err = 0;
    for(unsigned k = 0; k < data.size(); k++)
    {
- T val = boost::multiprecision::pow(data[k][0], data[k][1]);
- T e = ceil(fabs((val - data[k][2]) / data[k][2]) / std::numeric_limits<T>::epsilon());
+ T val = pow(data[k][0], data[k][1]);
+ T e = relative_error(val, data[k][2]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
+ {
          max_err = err;
+ }
    }
    std::cout << "Max error was: " << max_err << std::endl;
 }

Modified: sandbox/big_number/libs/multiprecision/test/test_sin.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_sin.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_sin.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -10,6 +10,7 @@
 
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/array.hpp>
+#include "test.hpp"
 
 #if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
 # define TEST_MPF50
@@ -44,107 +45,107 @@
 {
    static const boost::array<T, 101u> data =
    {{
- T("-0.86508717968306725270818735916557777730599862881751831435316187689198923993283521790498932671735565487198406771220725516598383731877859238387113868142949869746710189966430151098818077220502499366007854414799684058332411166897077090145203892212195332779437567412064793775991386725873517928401298446944183864288115967332769329141686571538486980106767058872245206155998183801127952563209302584516809804068"),
- T("-0.79763858366953481259714957489398094215522640329181266031581650731842869736147648450595884906779088504877531298007549709584387968778149220989565106227234119514920955857261247662051707093671536949960734074547532698822613207712655346154633044042812601716529880175764244503721748663711634053406295594334950958339944104852233364538438677862264102037879639671893945361353871735018017912124896762688051071101"),
- T("0.24694751481270393816989455015331965599577990782082974819820952118012926923238759680307705708664260650582713915549160371243741339970969856458066110960284501686263922529370992689985210394245398556897269198908375140963677715274995382713675198405319566885196239063678630261988218491689541221423165343153282194748383394932208400962140245741297801785867823531750497892155090643962052920864620306068640533502"),
- T("0.98901354618029602175090175847463473510249349724827992487552201591187355027688868967642510244298626184812677555619430672681773746616625955520405639182509666726561394718194458471759810888548201804764323767747429110609233156664896859247358618600160567275441201363464883016296014653448896069217108492576553919644561112490398174029484186504656523262450502010870102764110481052688040511085868232105814711948"),
- T("0.51950049121984044339738214491377557901625353846688754076530639315973808266367537549984077340395292997735469833961726139018356328562746542110713036413300858234570352248446585277165262617881845994831334396201052962253340345385732694479841227791272253515875849614421139763193705915213364104134129815431668002845745090121741132063335533091373430722704456843140034973756911786188684117004466722017726632522"),
- T("-0.58642035909386951523768726695456120016000621264121118748335087467285913667949995440747093529938553592801111543797937432739099086039685347738175389472878030459744416755494430838140051041697426054654163206937572434284771573711696435479889701764370159398277764008561691680023659946126461221466012782190610630337123139316903479632261164136029483310671081582686512548571027968589672841130517258821548718323"),
- T("-0.97395403906078050869854812754010898778588110998510216999024129038738667688293411233247507547660433481826378554022069634273248636871268889943206657893365085495908990103953837221918076997320773016743323042411543366853067308772133354882422005996025272628299293665330139411017152702226907842064909056524954416279212381635918809975293849765789208374484279614272702262407912547006420026381898882431367705053"),
- T("-0.16835709980798731779763364790367408966536862842255885422223099514294148991190930841731427782587704016811168224144233724867667772646548196695213703654087451353235456862964457399533377933177974811857965890770102023474800434793450796708363928962489727300887984685066126963778396606401313473669144644834322766129500826515170674439623002622166198644072962305451561242924295496497673865817996583336572441598"),
- T("0.84348366891508115788160933441645221250048198837137321279789763092610185698937735368600669544368356295269809174537295606389343383737539420322987993567260099654804618392548221004269952154930593772246006464043499864133979093900482916664339574929175866269202056532433888199203357312856354292159018595451908698245799015703256761432875415473819767251067057623850803832618933566752146583252515995117479236918"),
- T("0.82202496781424117249008335037366444394838277287311909893953311783617946236226559994208529824007840086283951031540156850110406585677216210109663411850204100009480981960066776312830296812837514885788767571642502602406668355250521717143900938155040050319876970346676468728877434985446025106390443319201723689927608809502112038908318173339375177994594042306023859374748187782138324203679569236625767697521"),
- T("-0.20644548078966172278108566693593446671066500009311131547131824408615418778824039740776494907158941999700112622969927991803006352755440587105827687343678969660134349201419765578964725001619127224358098018507197217477518476424879393188273937853474771810828977229876872752634362284867524335876537185168202058991502610059394227279455590213187025513498301701182162411129861291651458149809232765920694382718"),
- T("-0.98201238933821398742743268689921357999177043645192920595050426161233644052306998773405192706007122833665193511424723001758553674874382453729473736698967318043174263178305116522678701572642644955125046307737685013720369337168716304062292912089093170603176088603092541579085189475146906948455044376044742840712066206800020164347462069250277677754185339937853236236760620498554396625100570743064458561012"),
- T("-0.55457689409530213747356287041164249845415987873946462511683197174099773035991522752407571732843646308149750048541683187925931560402799808039721796055589991969835698977651564881904161899499528485305192774993355886674471830577982958725011962505578939702283684004757222629888058039297509802651204034056785648094344956773393289641899074853933663408784777126564054915893792740950321751681666900366149285673"),
- T("0.55223631972553454320768877543021740444770413956059533654445613814866273197657606242587941011620967135302125178080188557790223181274132635479848516001166956056684169152368919096181559634794365697929692462933846221564253699877634144325144847224182437654513501600352945517055120350460290761483324902471273182702037419675899405714185903257727806710137118071603904368311406545920382236241507802254402670342"),
- T("0.98253910729963647217200550710547625178905758256820276353400539681385849046526414570850258127380376793100401827298985862391604692170961399606758739415403392939490853364686526772514484164160895334184339538751098251139449063960873514450954179656572162689800220524835985551929362412800974236601606988593425142227646314150034874268224737812934754054739495109549178354735648685843025309695149000523043036256"),
- T("0.20919424161231759292985627465559155127857466748292444765172341549043455435483356353779261807927572689301399184910446505295185314912207254913673684840121644950196263845525205209069485089301207501133253448764073025457512071224229423661258059212569761388984180893967120131886763302041343297149817612448231084051035085349821477062216670975268069118975416132488618059227673886548754511524393205260913936737"),
- T("-0.82042150034016416806875390736702748196355225785028360060677365666061470851725327317484829164156996988612675463903575414696300136809557656769505171924327821177877208936984569326071873868949719900334446867163962763207795935703399610925921076634415348400788763860462929861356452609306026119961919669078311635349472648728526901263549622576885884996291919276608766907523487313088490283878962209939268414829"),
- T("-0.84498980323075860897972946021725417020274887656496755152613838764676035268791649188464914202966471633575987923264828416390016799882223646789601058107569902148674040269544868920695600748107986559656481124234185704814218734471348170295455557819067840791831040541198080087226424277346298230729678145499808600603861335243905613388932855271426976928024047466289393683437131604292988966125504076029384924023"),
- T("0.16558643533491417205585047942945840817444866977186231320483545168338776228411479964576268852405814440921094618356469443677441509984568603636330335278789316351077745488280059266519036588084571034766067428538242876359850813716345435707699637862360396048950400623443566517903264884891653913736982243815926409161441171926621253221896245282532431364608500284511449412428102071793828094632271947929662322388"),
- T("0.9733130134422248664781076439996325547596041902633251431309613137772871577452457011348386026771902539246123917754369011815275465953253766314483807639106238230199709503923447643159359893490066619470146552346442263259964047308322485032089683425930804181966240839058765435955921596502848477098334939721288492487750073064012585262871240814591890531382462762625592433554435697556163942273461885638661645373"),
- T("0.58869425301303541994797274551524668431807337246095715070998523760895824155086577422557656235988936714948459396658626194388329584290953541802060334893578288199017940637454710820521526799628794241448315885605593820784070904763717099063196519196389181232206959679228386773967307850125102763819453488563433855077856029436716904341327752651679433491068803177798096114777267163356371922112193539114936367793"),
- T("-0.51709728401438414917109716343072272559608361642833403289320143191669289972512815282728235788726767946133258714516539347300398650917111088383730840642462745361559628023336834708274177008810720997864503236483231424256182008792514317978767120858313922250278919795149943234196749501590214648800764097687555634887106709926715156050968991302040120816446887836448112221991715147755412747643904982369941874903"),
- T("-0.98942504561778994579633520641173655056014959757317198390962485163668002823254326156828513148058511330328117672273198435854028958189163569498745241605165009769541862169414925124968295274462159200520442455095613008718526467538007940197043090974670359128924585720097669855764038631475310106434490427905711290624710915672501400113806220416195439435490181070678989789478092500957769720727750016650901714876"),
- T("-0.24966961848279291797571833930275478107046130070512731730054610018931793329197222379145867877191403438507358664845958042303643850373616999952368954956802652884289978026682268405432675662623924967650629865863280328006489120844535221004915558956531029998007360982378798891060454706118319300864403238959986801161474819341364524976070498799822591253693631124434026399072435454954851787496900161449413279223"),
- T("0.79594055595422952691181178601097588849087648705672837252520925001820847496121721128286756288605360935162062680205427201959305734943295649471345888560139726757801278052687627513338719817916945750214503848241201988433673534399927155896112448547784281558455109017382599606935223412144543300644796946427196636388890407359228183542249818866763328733472675174818547133151154516588878300883530746640968325861"),
- T("0.86649337624388547603453321055003727682405511135812925957248489739919757880982158700509398511202886625151501180599611933401736555472982930024421765233048287030623272875751902474678241444565197252953357529927172840699144509942108163113181199347462221304945816329094035938388900123384165001280011688853078191968630514719137943065609922040635003116435361117139325021519623335846499222050126246453597170833"),
- T("-0.1244410370371604254208240524194278926442108653864928935045533919736466234398227704731948452746209576611285042916086804685407426387667022583034033620993631898331144469445927075361836574325552419453828929182451743365661513957092134365138299104921209789330945195117245194360833974076928889872484098355943802078944073614928420504484518104238232385695964828077489150197654158701678306792352671268317890272"),
- T("-0.96293046254479079199525681753175960597403031074325898542927860894499480571620304305496779255522714740449920561168034834326825673596092141778811133613057020474685368838786612124083863539941316962278807332763650117226990808742108594645615178525818371573122469236743437907516188100317299657360446054991401261819129204379540798883211112991870608214671142610787565091372101286504874487369815732318336349301"),
- T("-0.62179356795469823415192312397624874675187191101898449037192803173787210412483490820000397097177845254715052331863963593667486830949291665803517410280665438510706842857082320141162218238699592290729367363950604466282373746899578041764378198664733652245195397766367192007717967103668113752808285669458804690643918469292331076180494649617596159416023979394805630825188506001209288256336069204288392918838"),
- T("0.48106401879047921636300391903940107974582760756679309056624716720150642739438342683672522048951018737803088677542525404601585084899079521603734609111135623651892724625992491018152917388956983222505917061754711563327272328292684822300781993087528192469722167755578240677892037874808381277754976653429844703376014341933327393380277555990041743102376562190670837062637051362532345331538219172506270246382"),
- T("0.99459994598660210790246203022148930567403641332218416710062008621506849496380708626551905127945616727090196117664589091004541642161620912257208486753611501380010498988340379322071716856719164564672927645435101404830980303745361961742256873999110722481713879285794690870477524893138199111938913573011925775303350770468373885738832279778798291949531285037943371526561613622424317208916781257715667313581"),
- T("0.28971323531857568215733762332571032238826720017802004073812127963067217035517116389133284725195297132478232737373492302474489345753341693637584844179360668204049858751950419151081083323122754896023020805399882258107804380387112498888463322046038842525866090837069466212429580864869728865250452052787720449604911495690324684990021677192825514006536158108787009532155828922880124667158494830079658512834"),
- T("-0.77008317127836149586878227059441350607034119134834670931732901937779794039455678722027323000807268437290639233506821159491390367599326413477276644187223128663850330256445887240546131620117611701853928301285348103306423446252568562902316700603944623091642743103450263900938785484049174821097911777581836743736428447638710800031710950631619240205470844855655792342941803794181628118648640971785223895876"),
- T("-0.88649850017673821224561809313855387711494312733345943767846677270453513982665617998145538590166442213419297144115248659615137339374320428869731210388654046137340073163830069184603212007278659182492697000063091326735676965960505375616122884162932165199220730427526058986119610548232796127810029383442287778473786899637739243088842682085531376471601373062369273637834719593554537141683999217223108777744"),
- T("0.083080439682369446261941860869339750420290004566040999778829779164510726472983010580067243494180590665495350929857908288257260333087985455133237616981062631238079114106138544790668480770034429554478579438789193350580847656213214727573008763057329069201052276891726438472292117455024152732335694633669865925030242983966039212743857415675412320417462552183844941128084005364683434559113799225166204962233"),
- T("0.95088269145580379080881101181112994052817118522049856992220036183689985937794231145980774478416653809589611744235048028615644615194631392655321782728314051357571890517116936363315155374421300181857604455336079096611022607668388384799386418069760723004847858784954833878669474357403336991887563364651104186693715603819443888233612866696932669196365387585172649113432965547015182359279258388342378601416"),
- T("0.65381759943134372106091314588882519891954306836908397778723174077695027443392791956504268149479549903097213397297315499069850358516736287190903269479767199733614758880061832597202653797690144333090552903833899073895212983370074179915262608190468586811072275899498782703930003207603330356201921815802020943598313063056751498074179598679039887095914705463376631567774307957063595250839360463815064201881"),
- T("-0.44419883729776869434215071043777351144885030313451423935916035359618633896743881816177107613844097597506905160463293878480033961624169222223295759692648326664891288415570974076231512054827602757300757558932537164133079144259056831830919794753959849196109997567447839019812358107684761555967862120024116269901062705630447884553959212830932666828758642780403825798457036759897149148537604844399459548053"),
- T("-0.99805485931896998415393032770516446507771859322057899721697973416742915484901238232275785525940419957209526513627987177343779809373389157284465387153256600311648238334663448491831652332368312374266794595524373421505295425580509620840292149779344897042078912546100024102919688347595170844681619630553312369459496674685957338099812389267540391789384661598432484560731964762141424249915228499619880194537"),
- T("-0.32925584367246074527751396405706006739637798458722245566584108718687942076934044708484934395776690595227015287405290706639110667384016496689668602236850778364504698270562443122446777121633580240826031233297957129154523055470095490128048296939167974638270094687461177877139544097682449778044363207679045057493400456686353020427908875447286459468112566742417779096833118762203417239243684311231171355257"),
- T("0.74289406214691971730748689577071217763372018162585246470580187915854993014301138575550281083980887718816934749714046327786941209573648523055241872433461772076860288459827515491353103487336092666555533666775562550333977874850593623837303036248122754018490021383285853316403824589398140210724484596507930263094598302837215576862656152830461839065227673408330599330179492764472850719715849698041674036671"),
- T("0.90497057965861947038086599125811051384385044697380649969790067815919477474459340879746896604169505347120527692320057718967343970641857165915886346383145960515992441520153342687355055159285406653023104853613872396986139584358904781952363737284861566876891343765798384121744173765740395134357707977315982337368931113664139166273039854021692888036428013020429307841621946009361316544995599016861275630769"),
- T("-0.041576169205724414854331070120053457632530839733700369568167900754032406936654732772225888568634961935991599374915238690240599985796132138663492274966652919918441321848911576199257910762408333861417879305855108842865299418446579173115561267409572938992011498300648706364387410319460214397723214932915588169565205375812490511157716082500702780952451334934264616069402150160091480447723605317627380573224"),
- T("-0.93719053469287541428447587920734971303045432291101939590716959209616543859713365160616776090412883872180361728110905082632348674501130850562014606872006847637794825897919364230003376975014085954809549306630677263098107502639663445116999448134011722873039267927440801790504248068619316004733842223304424897958505882332051426143421784920188133729127262166283872235910357317736650757661074470493571412889"),
- T("-0.68471096746912734562470712876063800310010723726902681221146004451735978903661775368964845187095694357185341078508280456672582218780943948231295585200462910309462638043306220829569568223236127599504907044705589687387386319181085952764133248551365406192657503789196736085441072782932910447315642044863129150642662429341110770180104183011207149983149660707056083856793755175252844455169463798794450950564"),
- T("0.40656549143420863029908616751057885992068413298024300589949432115120595898702030047373213851768191655418538252805786101555132655463705735655711116154911765012476201409686869641764641591979668818343426771144822241041750152386563094831102053728224980943104700599378495286307562549354472575266695139105050719290255561758911030594734879707560039179536988148731390148863859754525169110234247580451842221669"),
- T("0.99978381094521086442978283578205200383899997058493813685797491852361573237867864126930099929206074874924525764484785288016649661565231871317512839959145480453557525203272815558595173449617271532616787029536616206070064038068200899478815974462302016941233137744957010925379020671232973472871426623684133227677308974216593623778540970772162801182795433315750474086424241697242150612379589791040978731667"),
- T("0.36822906150398015822020319344162532428677981447045504526401832896397568656416150947456641712465258877489220724479853323760381517310729310497119744108741895595122245701305436253648702833101014863503443210528716577148214088604629263271753365879547676920872334528859185577830585960895038151179369059434978333166167532494557340097007973338568999353459041439303550202850628759030952416080241927287498139623"),
- T("-0.7144202473793071622881824775602288526051552507380513260225595579233618296068431093342018128610611262439148937183337715231254167800684731882124998094889468876528172261692144316638297695446478340662483258456439006572000095777092767225185208121633549640410407788341811629709553299018947000385149072176583748965166297086235970966085113896085627672474399917518485166722788989758308777458718519262591124605"),
- T("-0.92187767045167441324530701803233328862428889387952715397673074188905541924455439014301496958042559842229652278722386549208881577386402901283648710147036914825018808066251392970466575927695920587735551236320976667968957032620207459743622857456422499005778316090809442840146125918223889417182053059405944140104740509712594294160758554714036208559142846789714294797916313510255933830907372057747524929562"),
- T("0"),
- T("0.92187767045167441324530701803233328862428889387952715397673074188905541924455439014301496958042559842229652278722386549208881577386402901283648710147036914825018808066251392970466575927695920587735551236320976667968957032620207459743622857456422499005778316090809442840146125918223889417182053059405944140104740509712594294160758554714036208559142846789714294797916313510255933830907372057747524929562"),
- T("0.7144202473793071622881824775602288526051552507380513260225595579233618296068431093342018128610611262439148937183337715231254167800684731882124998094889468876528172261692144316638297695446478340662483258456439006572000095777092767225185208121633549640410407788341811629709553299018947000385149072176583748965166297086235970966085113896085627672474399917518485166722788989758308777458718519262591124605"),
- T("-0.36822906150398015822020319344162532428677981447045504526401832896397568656416150947456641712465258877489220724479853323760381517310729310497119744108741895595122245701305436253648702833101014863503443210528716577148214088604629263271753365879547676920872334528859185577830585960895038151179369059434978333166167532494557340097007973338568999353459041439303550202850628759030952416080241927287498139623"),
- T("-0.99978381094521086442978283578205200383899997058493813685797491852361573237867864126930099929206074874924525764484785288016649661565231871317512839959145480453557525203272815558595173449617271532616787029536616206070064038068200899478815974462302016941233137744957010925379020671232973472871426623684133227677308974216593623778540970772162801182795433315750474086424241697242150612379589791040978731667"),
- T("-0.40656549143420863029908616751057885992068413298024300589949432115120595898702030047373213851768191655418538252805786101555132655463705735655711116154911765012476201409686869641764641591979668818343426771144822241041750152386563094831102053728224980943104700599378495286307562549354472575266695139105050719290255561758911030594734879707560039179536988148731390148863859754525169110234247580451842221669"),
- T("0.68471096746912734562470712876063800310010723726902681221146004451735978903661775368964845187095694357185341078508280456672582218780943948231295585200462910309462638043306220829569568223236127599504907044705589687387386319181085952764133248551365406192657503789196736085441072782932910447315642044863129150642662429341110770180104183011207149983149660707056083856793755175252844455169463798794450950564"),
- T("0.93719053469287541428447587920734971303045432291101939590716959209616543859713365160616776090412883872180361728110905082632348674501130850562014606872006847637794825897919364230003376975014085954809549306630677263098107502639663445116999448134011722873039267927440801790504248068619316004733842223304424897958505882332051426143421784920188133729127262166283872235910357317736650757661074470493571412889"),
- T("0.041576169205724414854331070120053457632530839733700369568167900754032406936654732772225888568634961935991599374915238690240599985796132138663492274966652919918441321848911576199257910762408333861417879305855108842865299418446579173115561267409572938992011498300648706364387410319460214397723214932915588169565205375812490511157716082500702780952451334934264616069402150160091480447723605317627380573224"),
- T("-0.90497057965861947038086599125811051384385044697380649969790067815919477474459340879746896604169505347120527692320057718967343970641857165915886346383145960515992441520153342687355055159285406653023104853613872396986139584358904781952363737284861566876891343765798384121744173765740395134357707977315982337368931113664139166273039854021692888036428013020429307841621946009361316544995599016861275630769"),
- T("-0.74289406214691971730748689577071217763372018162585246470580187915854993014301138575550281083980887718816934749714046327786941209573648523055241872433461772076860288459827515491353103487336092666555533666775562550333977874850593623837303036248122754018490021383285853316403824589398140210724484596507930263094598302837215576862656152830461839065227673408330599330179492764472850719715849698041674036671"),
- T("0.32925584367246074527751396405706006739637798458722245566584108718687942076934044708484934395776690595227015287405290706639110667384016496689668602236850778364504698270562443122446777121633580240826031233297957129154523055470095490128048296939167974638270094687461177877139544097682449778044363207679045057493400456686353020427908875447286459468112566742417779096833118762203417239243684311231171355257"),
- T("0.99805485931896998415393032770516446507771859322057899721697973416742915484901238232275785525940419957209526513627987177343779809373389157284465387153256600311648238334663448491831652332368312374266794595524373421505295425580509620840292149779344897042078912546100024102919688347595170844681619630553312369459496674685957338099812389267540391789384661598432484560731964762141424249915228499619880194537"),
- T("0.44419883729776869434215071043777351144885030313451423935916035359618633896743881816177107613844097597506905160463293878480033961624169222223295759692648326664891288415570974076231512054827602757300757558932537164133079144259056831830919794753959849196109997567447839019812358107684761555967862120024116269901062705630447884553959212830932666828758642780403825798457036759897149148537604844399459548053"),
- T("-0.65381759943134372106091314588882519891954306836908397778723174077695027443392791956504268149479549903097213397297315499069850358516736287190903269479767199733614758880061832597202653797690144333090552903833899073895212983370074179915262608190468586811072275899498782703930003207603330356201921815802020943598313063056751498074179598679039887095914705463376631567774307957063595250839360463815064201881"),
- T("-0.95088269145580379080881101181112994052817118522049856992220036183689985937794231145980774478416653809589611744235048028615644615194631392655321782728314051357571890517116936363315155374421300181857604455336079096611022607668388384799386418069760723004847858784954833878669474357403336991887563364651104186693715603819443888233612866696932669196365387585172649113432965547015182359279258388342378601416"),
- T("-0.083080439682369446261941860869339750420290004566040999778829779164510726472983010580067243494180590665495350929857908288257260333087985455133237616981062631238079114106138544790668480770034429554478579438789193350580847656213214727573008763057329069201052276891726438472292117455024152732335694633669865925030242983966039212743857415675412320417462552183844941128084005364683434559113799225166204962233"),
- T("0.88649850017673821224561809313855387711494312733345943767846677270453513982665617998145538590166442213419297144115248659615137339374320428869731210388654046137340073163830069184603212007278659182492697000063091326735676965960505375616122884162932165199220730427526058986119610548232796127810029383442287778473786899637739243088842682085531376471601373062369273637834719593554537141683999217223108777744"),
- T("0.77008317127836149586878227059441350607034119134834670931732901937779794039455678722027323000807268437290639233506821159491390367599326413477276644187223128663850330256445887240546131620117611701853928301285348103306423446252568562902316700603944623091642743103450263900938785484049174821097911777581836743736428447638710800031710950631619240205470844855655792342941803794181628118648640971785223895876"),
- T("-0.28971323531857568215733762332571032238826720017802004073812127963067217035517116389133284725195297132478232737373492302474489345753341693637584844179360668204049858751950419151081083323122754896023020805399882258107804380387112498888463322046038842525866090837069466212429580864869728865250452052787720449604911495690324684990021677192825514006536158108787009532155828922880124667158494830079658512834"),
- T("-0.99459994598660210790246203022148930567403641332218416710062008621506849496380708626551905127945616727090196117664589091004541642161620912257208486753611501380010498988340379322071716856719164564672927645435101404830980303745361961742256873999110722481713879285794690870477524893138199111938913573011925775303350770468373885738832279778798291949531285037943371526561613622424317208916781257715667313581"),
- T("-0.48106401879047921636300391903940107974582760756679309056624716720150642739438342683672522048951018737803088677542525404601585084899079521603734609111135623651892724625992491018152917388956983222505917061754711563327272328292684822300781993087528192469722167755578240677892037874808381277754976653429844703376014341933327393380277555990041743102376562190670837062637051362532345331538219172506270246382"),
- T("0.62179356795469823415192312397624874675187191101898449037192803173787210412483490820000397097177845254715052331863963593667486830949291665803517410280665438510706842857082320141162218238699592290729367363950604466282373746899578041764378198664733652245195397766367192007717967103668113752808285669458804690643918469292331076180494649617596159416023979394805630825188506001209288256336069204288392918838"),
- T("0.96293046254479079199525681753175960597403031074325898542927860894499480571620304305496779255522714740449920561168034834326825673596092141778811133613057020474685368838786612124083863539941316962278807332763650117226990808742108594645615178525818371573122469236743437907516188100317299657360446054991401261819129204379540798883211112991870608214671142610787565091372101286504874487369815732318336349301"),
- T("0.1244410370371604254208240524194278926442108653864928935045533919736466234398227704731948452746209576611285042916086804685407426387667022583034033620993631898331144469445927075361836574325552419453828929182451743365661513957092134365138299104921209789330945195117245194360833974076928889872484098355943802078944073614928420504484518104238232385695964828077489150197654158701678306792352671268317890272"),
- T("-0.86649337624388547603453321055003727682405511135812925957248489739919757880982158700509398511202886625151501180599611933401736555472982930024421765233048287030623272875751902474678241444565197252953357529927172840699144509942108163113181199347462221304945816329094035938388900123384165001280011688853078191968630514719137943065609922040635003116435361117139325021519623335846499222050126246453597170833"),
- T("-0.79594055595422952691181178601097588849087648705672837252520925001820847496121721128286756288605360935162062680205427201959305734943295649471345888560139726757801278052687627513338719817916945750214503848241201988433673534399927155896112448547784281558455109017382599606935223412144543300644796946427196636388890407359228183542249818866763328733472675174818547133151154516588878300883530746640968325861"),
- T("0.24966961848279291797571833930275478107046130070512731730054610018931793329197222379145867877191403438507358664845958042303643850373616999952368954956802652884289978026682268405432675662623924967650629865863280328006489120844535221004915558956531029998007360982378798891060454706118319300864403238959986801161474819341364524976070498799822591253693631124434026399072435454954851787496900161449413279223"),
- T("0.98942504561778994579633520641173655056014959757317198390962485163668002823254326156828513148058511330328117672273198435854028958189163569498745241605165009769541862169414925124968295274462159200520442455095613008718526467538007940197043090974670359128924585720097669855764038631475310106434490427905711290624710915672501400113806220416195439435490181070678989789478092500957769720727750016650901714876"),
- T("0.51709728401438414917109716343072272559608361642833403289320143191669289972512815282728235788726767946133258714516539347300398650917111088383730840642462745361559628023336834708274177008810720997864503236483231424256182008792514317978767120858313922250278919795149943234196749501590214648800764097687555634887106709926715156050968991302040120816446887836448112221991715147755412747643904982369941874903"),
- T("-0.58869425301303541994797274551524668431807337246095715070998523760895824155086577422557656235988936714948459396658626194388329584290953541802060334893578288199017940637454710820521526799628794241448315885605593820784070904763717099063196519196389181232206959679228386773967307850125102763819453488563433855077856029436716904341327752651679433491068803177798096114777267163356371922112193539114936367793"),
- T("-0.9733130134422248664781076439996325547596041902633251431309613137772871577452457011348386026771902539246123917754369011815275465953253766314483807639106238230199709503923447643159359893490066619470146552346442263259964047308322485032089683425930804181966240839058765435955921596502848477098334939721288492487750073064012585262871240814591890531382462762625592433554435697556163942273461885638661645373"),
- T("-0.16558643533491417205585047942945840817444866977186231320483545168338776228411479964576268852405814440921094618356469443677441509984568603636330335278789316351077745488280059266519036588084571034766067428538242876359850813716345435707699637862360396048950400623443566517903264884891653913736982243815926409161441171926621253221896245282532431364608500284511449412428102071793828094632271947929662322388"),
- T("0.84498980323075860897972946021725417020274887656496755152613838764676035268791649188464914202966471633575987923264828416390016799882223646789601058107569902148674040269544868920695600748107986559656481124234185704814218734471348170295455557819067840791831040541198080087226424277346298230729678145499808600603861335243905613388932855271426976928024047466289393683437131604292988966125504076029384924023"),
- T("0.82042150034016416806875390736702748196355225785028360060677365666061470851725327317484829164156996988612675463903575414696300136809557656769505171924327821177877208936984569326071873868949719900334446867163962763207795935703399610925921076634415348400788763860462929861356452609306026119961919669078311635349472648728526901263549622576885884996291919276608766907523487313088490283878962209939268414829"),
- T("-0.20919424161231759292985627465559155127857466748292444765172341549043455435483356353779261807927572689301399184910446505295185314912207254913673684840121644950196263845525205209069485089301207501133253448764073025457512071224229423661258059212569761388984180893967120131886763302041343297149817612448231084051035085349821477062216670975268069118975416132488618059227673886548754511524393205260913936737"),
- T("-0.98253910729963647217200550710547625178905758256820276353400539681385849046526414570850258127380376793100401827298985862391604692170961399606758739415403392939490853364686526772514484164160895334184339538751098251139449063960873514450954179656572162689800220524835985551929362412800974236601606988593425142227646314150034874268224737812934754054739495109549178354735648685843025309695149000523043036256"),
- T("-0.55223631972553454320768877543021740444770413956059533654445613814866273197657606242587941011620967135302125178080188557790223181274132635479848516001166956056684169152368919096181559634794365697929692462933846221564253699877634144325144847224182437654513501600352945517055120350460290761483324902471273182702037419675899405714185903257727806710137118071603904368311406545920382236241507802254402670342"),
- T("0.55457689409530213747356287041164249845415987873946462511683197174099773035991522752407571732843646308149750048541683187925931560402799808039721796055589991969835698977651564881904161899499528485305192774993355886674471830577982958725011962505578939702283684004757222629888058039297509802651204034056785648094344956773393289641899074853933663408784777126564054915893792740950321751681666900366149285673"),
- T("0.98201238933821398742743268689921357999177043645192920595050426161233644052306998773405192706007122833665193511424723001758553674874382453729473736698967318043174263178305116522678701572642644955125046307737685013720369337168716304062292912089093170603176088603092541579085189475146906948455044376044742840712066206800020164347462069250277677754185339937853236236760620498554396625100570743064458561012"),
- T("0.20644548078966172278108566693593446671066500009311131547131824408615418778824039740776494907158941999700112622969927991803006352755440587105827687343678969660134349201419765578964725001619127224358098018507197217477518476424879393188273937853474771810828977229876872752634362284867524335876537185168202058991502610059394227279455590213187025513498301701182162411129861291651458149809232765920694382718"),
- T("-0.82202496781424117249008335037366444394838277287311909893953311783617946236226559994208529824007840086283951031540156850110406585677216210109663411850204100009480981960066776312830296812837514885788767571642502602406668355250521717143900938155040050319876970346676468728877434985446025106390443319201723689927608809502112038908318173339375177994594042306023859374748187782138324203679569236625767697521"),
- T("-0.84348366891508115788160933441645221250048198837137321279789763092610185698937735368600669544368356295269809174537295606389343383737539420322987993567260099654804618392548221004269952154930593772246006464043499864133979093900482916664339574929175866269202056532433888199203357312856354292159018595451908698245799015703256761432875415473819767251067057623850803832618933566752146583252515995117479236918"),
- T("0.16835709980798731779763364790367408966536862842255885422223099514294148991190930841731427782587704016811168224144233724867667772646548196695213703654087451353235456862964457399533377933177974811857965890770102023474800434793450796708363928962489727300887984685066126963778396606401313473669144644834322766129500826515170674439623002622166198644072962305451561242924295496497673865817996583336572441598"),
- T("0.97395403906078050869854812754010898778588110998510216999024129038738667688293411233247507547660433481826378554022069634273248636871268889943206657893365085495908990103953837221918076997320773016743323042411543366853067308772133354882422005996025272628299293665330139411017152702226907842064909056524954416279212381635918809975293849765789208374484279614272702262407912547006420026381898882431367705053"),
- T("0.58642035909386951523768726695456120016000621264121118748335087467285913667949995440747093529938553592801111543797937432739099086039685347738175389472878030459744416755494430838140051041697426054654163206937572434284771573711696435479889701764370159398277764008561691680023659946126461221466012782190610630337123139316903479632261164136029483310671081582686512548571027968589672841130517258821548718323"),
- T("-0.51950049121984044339738214491377557901625353846688754076530639315973808266367537549984077340395292997735469833961726139018356328562746542110713036413300858234570352248446585277165262617881845994831334396201052962253340345385732694479841227791272253515875849614421139763193705915213364104134129815431668002845745090121741132063335533091373430722704456843140034973756911786188684117004466722017726632522"),
- T("-0.98901354618029602175090175847463473510249349724827992487552201591187355027688868967642510244298626184812677555619430672681773746616625955520405639182509666726561394718194458471759810888548201804764323767747429110609233156664896859247358618600160567275441201363464883016296014653448896069217108492576553919644561112490398174029484186504656523262450502010870102764110481052688040511085868232105814711948"),
- T("-0.24694751481270393816989455015331965599577990782082974819820952118012926923238759680307705708664260650582713915549160371243741339970969856458066110960284501686263922529370992689985210394245398556897269198908375140963677715274995382713675198405319566885196239063678630261988218491689541221423165343153282194748383394932208400962140245741297801785867823531750497892155090643962052920864620306068640533502"),
- T("0.79763858366953481259714957489398094215522640329181266031581650731842869736147648450595884906779088504877531298007549709584387968778149220989565106227234119514920955857261247662051707093671536949960734074547532698822613207712655346154633044042812601716529880175764244503721748663711634053406295594334950958339944104852233364538438677862264102037879639671893945361353871735018017912124896762688051071101"),
- T("0.86508717968306725270818735916557777730599862881751831435316187689198923993283521790498932671735565487198406771220725516598383731877859238387113868142949869746710189966430151098818077220502499366007854414799684058332411166897077090145203892212195332779437567412064793775991386725873517928401298446944183864288115967332769329141686571538486980106767058872245206155998183801127952563209302584516809804068"),
+T("-9.71360659712083391437631022096936715962104815777147739346439739644168480837178969413799829610404829247283169084501281105e-1"),
+T("-5.95431113317256105006804890684659010940293672390817519158205264611725147142085353698349092164137652363446368483953564682e-1"),
+T("5.09924118934356013545988500545586843463766955556781588535384546070893806324487181574368899833574915659357543038822935347e-1"),
+T("9.90602974910637417521410554344955057938063175873799034495811832851567842600306335485818201417146475654562543760051881571e-1"),
+T("2.57755634110962773819397192502372718147953063328591480930319110437537556577887190430547163274290595074462686853519200826e-1"),
+T("-7.90852129665907861812449876176102241731921451584589870529143390612597378289323905030142878920134443274067663564142249906e-1"),
+T("-8.70636054394434218558219672958497111094237434037462776135170928197514857325641761722162169311905082223410873872693125021e-1"),
+T("1.16142192225871586802402588799179588339908282696987123538816621894316618250692422106879105583060486278819650782761165055e-1"),
+T("9.60641850565339311654365605083646127348817546384991780755200411966145627086231307074524787693440076802209868233548778731e-1"),
+T("6.28318825240308217440049590303028869715272770671179428040549526344092598897275498972932981684079339892035243316790587027e-1"),
+T("-4.73718579778960595001132927360485548840577209745936881040433718918629103032639945353908537818475936329314134212199346978e-1"),
+T("-9.95432766494621395340223548609251497842694553405493731879049259799325119533316838972006879914623359183523219011870805961e-1"),
+T("-2.97704078652633309130390182393607392013126109733352620573058826659738026681661456497779386104992235762190242017128767206e-1"),
+T("7.64723391125286889782047394187107836056829439952009227196240883193721606229047061163517791688110517783506991004016374431e-1"),
+T("8.90335717074674250432504838435892622513509178529392798127561987551398090841490265311069534613651712468228001675091153605e-1"),
+T("-7.47469618974513669394515485690188234127771130501791709462887130373371023385813212165673231177548426835629029005547008861e-2"),
+T("-9.48261778982069330544079494960981900232314056127899219497335245577354566418258722147558010380033694835705634428764954401e-1"),
+T("-6.60119969404606610211922488494059074732492583049845598285779387022002845776084527598443564095143849120847643366330179739e-1"),
+T("4.36693827009658961576344650626557410722590226545637608661764593658572210930294024902150766064738444736422263939746970132e-1"),
+T("9.98541130824430070642243744636010968399851408459030982248969144276197147611376115185206245742327729890090526273555800490e-1"),
+T("3.37137695943362070360548307779555944485385294617304662646987679063953108310365389494460188124285214040163147170304540339e-1"),
+T("-7.37272196933518190054375156317136276073182897209685319124536092629865074949247291797880288692223977281455156619510259042e-1"),
+T("-9.08495699506960201290293288218820500948312195353635174830883006841931398581001427066173033535720385301624330783999899511e-1"),
+T("3.32224697427099307204044509056982627738295866011152619834749776109067529453431741767996787924292629814505731320175556430e-2"),
+T("9.34241854135599266375493853147210486293657026766576383005045752264274587199837314096798394557243705656211732557069413970e-1"),
+T("6.90779551281016826784976005137338585011513089446563025258584317423906941741640583083551185645679047405447557105684226754e-1"),
+T("-3.98913888475082839741071010629509607776766095858433376450534753556286110518195743624946499527251336022805096741714382999e-1"),
+T("-9.99922692526403520897313527841668431397204867244750030781062964701898557028332255650446046614062333174844253917288331438e-1"),
+T("-3.75988292423704532504216998833472116186771022412627192871974303806891208635376610998425108046077306043945435504842144332e-1"),
+T("7.08546019140379445669962535829318394094758212505515423960726677977484727061149949358051741627739138448760095710063342839e-1"),
+T("9.25084597170819667485373176055260044057716794391569156042799693611964098948722923916237050181882167134906470192542857299e-1"),
+T("8.35947487571472125423673177137150279693224632368449469153892167972732129345714981936363891382927399742266512920038864004e-3"),
+T("-9.18606321039298722214219289469027246078943851192917449117591801249272620492502932760495762195965214412326830491755901723e-1"),
+T("-7.20244550473164405555518647469765134103488938825118543602681358279149452868549672550326500728323814331193184035259160414e-1"),
+T("3.60444097985855629825697367385029316833790934188475151408740160657889784929257301330229580694580194294034115152177674537e-1"),
+T("9.99575062430677992414643463029115424067356090568060307410717467085018957489304987413609313388961297483138454662118061646e-1"),
+T("4.14188682766963304833862149212585018360876819555612195218295874225032162838027842720351664698295767693697842043579048219e-1"),
+T("-6.78594534657286312316409269272929566493548786915986771929001823358451551885758307761400157853363173388867780400090112946e-1"),
+T("-9.40073722462713282312837596921874850901167502371739429501407718251639587081137893231736511487958940802467918593519005653e-1"),
+T("-4.99269632411748222821310824324558181913141458235676771744322439351386139493233963671531219603373207564905654915871172017e-2"),
+T("9.01382218619061521491363679812206948759377256420255657634443270431495336446996377562469573885297156497163691224107230524e-1"),
+T("7.48464012406957686684753003872919309910943477238245908909177973105841950470333390670719219379167068809799710776770734833e-1"),
+T("-3.21350982331168500558883709193541886146178412146971245706190880193067020283050714591560922441331235332970961845050217575e-1"),
+T("-9.97498841702838239659412520756556451623238132913559678626409839807628110807613195403956929948379909495726426243705794281e-1"),
+T("-4.51672806064485973599605876288778011355969815150135195358334589946828629430271875346142404286368814526016297993583170592e-1"),
+T("6.47469539349743367777844577149239337681085253251300560380374646379682072633705733561446355539618404778987844138766238618e-1"),
+T("9.53437154306238691456130012770111782377503876017231780889420296856266641153714110120975772709549811845909173386912105405e-1"),
+T("9.14081116365893107669584386407698218216480671014671832303147213716318806206478591012619084058741626713939006968851852873e-2"),
+T("-8.82599332954202005638662236444958997569939600897565089251125658458817750203393016337212996488633688567918453254294067039e-1"),
+T("-7.75389136447631492669594511701990356678047393586968390929688701894781023967621486245394406725747074772996680491766725244e-1"),
+T("0"),
+T("9.21877670451674413245307018032333288624288893879527153976730741889055419244554390143014969580425598422296522787223865492e-1"),
+T("7.14420247379307162288182477560228852605155250738051326022559557923361829606843109334201812861061126243914893718333771523e-1"),
+T("-3.68229061503980158220203193441625324286779814470455045264018328963975686564161509474566417124652588774892207244798533238e-1"),
+T("-9.99783810945210864429782835782052003838999970584938136857974918523615732378678641269300999292060748749245257644847852880e-1"),
+T("-4.06565491434208630299086167510578859920684132980243005899494321151205958987020300473732138517681916554185382528057861016e-1"),
+T("6.84710967469127345624707128760638003100107237269026812211460044517359789036617753689648451870956943571853410785082804567e-1"),
+T("9.37190534692875414284475879207349713030454322911019395907169592096165438597133651606167760904128838721803617281109050826e-1"),
+T("4.15761692057244148543310701200534576325308397337003695681679007540324069366547327722258885686349619359915993749152386902e-2"),
+T("-9.04970579658619470380865991258110513843850446973806499697900678159194774744593408797468966041695053471205276923200577190e-1"),
+T("-7.42894062146919717307486895770712177633720181625852464705801879158549930143011385755502810839808877188169347497140463278e-1"),
+T("3.29255843672460745277513964057060067396377984587222455665841087186879420769340447084849343957766905952270152874052907066e-1"),
+T("9.98054859318969984153930327705164465077718593220578997216979734167429154849012382322757855259404199572095265136279871773e-1"),
+T("4.44198837297768694342150710437773511448850303134514239359160353596186338967438818161771076138440975975069051604632938785e-1"),
+T("-6.53817599431343721060913145888825198919543068369083977787231740776950274433927919565042681494795499030972133972973154991e-1"),
+T("-9.50882691455803790808811011811129940528171185220498569922200361836899859377942311459807744784166538095896117442350480286e-1"),
+T("-8.30804396823694462619418608693397504202900045660409997788297791645107264729830105800672434941805906654953509298579082883e-2"),
+T("8.86498500176738212245618093138553877114943127333459437678466772704535139826656179981455385901664422134192971441152486596e-1"),
+T("7.70083171278361495868782270594413506070341191348346709317329019377797940394556787220273230008072684372906392335068211595e-1"),
+T("-2.89713235318575682157337623325710322388267200178020040738121279630672170355171163891332847251952971324782327373734923025e-1"),
+T("-9.94599945986602107902462030221489305674036413322184167100620086215068494963807086265519051279456167270901961176645890910e-1"),
+T("-4.81064018790479216363003919039401079745827607566793090566247167201506427394383426836725220489510187378030886775425254046e-1"),
+T("6.21793567954698234151923123976248746751871911018984490371928031737872104124834908200003970971778452547150523318639635937e-1"),
+T("9.62930462544790791995256817531759605974030310743258985429278608944994805716203043054967792555227147404499205611680348343e-1"),
+T("1.24441037037160425420824052419427892644210865386492893504553391973646623439822770473194845274620957661128504291608680469e-1"),
+T("-8.66493376243885476034533210550037276824055111358129259572484897399197578809821587005093985112028866251515011805996119334e-1"),
+T("-7.95940555954229526911811786010975888490876487056728372525209250018208474961217211282867562886053609351620626802054272020e-1"),
+T("2.49669618482792917975718339302754781070461300705127317300546100189317933291972223791458678771914034385073586648459580423e-1"),
+T("9.89425045617789945796335206411736550560149597573171983909624851636680028232543261568285131480585113303281176722731984359e-1"),
+T("5.17097284014384149171097163430722725596083616428334032893201431916692899725128152827282357887267679461332587145165393473e-1"),
+T("-5.88694253013035419947972745515246684318073372460957150709985237608958241550865774225576562359889367149484593966586261944e-1"),
+T("-9.73313013442224866478107643999632554759604190263325143130961313777287157745245701134838602677190253924612391775436901182e-1"),
+T("-1.65586435334914172055850479429458408174448669771862313204835451683387762284114799645762688524058144409210946183564694437e-1"),
+T("8.44989803230758608979729460217254170202748876564967551526138387646760352687916491884649142029664716335759879232648284164e-1"),
+T("8.20421500340164168068753907367027481963552257850283600606773656660614708517253273174848291641569969886126754639035754147e-1"),
+T("-2.09194241612317592929856274655591551278574667482924447651723415490434554354833563537792618079275726893013991849104465053e-1"),
+T("-9.82539107299636472172005507105476251789057582568202763534005396813858490465264145708502581273803767931004018272989858624e-1"),
+T("-5.52236319725534543207688775430217404447704139560595336544456138148662731976576062425879410116209671353021251780801885578e-1"),
+T("5.54576894095302137473562870411642498454159878739464625116831971740997730359915227524075717328436463081497500485416831879e-1"),
+T("9.82012389338213987427432686899213579991770436451929205950504261612336440523069987734051927060071228336651935114247230018e-1"),
+T("2.06445480789661722781085666935934466710665000093111315471318244086154187788240397407764949071589419997001126229699279918e-1"),
+T("-8.22024967814241172490083350373664443948382772873119098939533117836179462362265599942085298240078400862839510315401568501e-1"),
+T("-8.43483668915081157881609334416452212500481988371373212797897630926101856989377353686006695443683562952698091745372956064e-1"),
+T("1.68357099807987317797633647903674089665368628422558854222230995142941489911909308417314277825877040168111682241442337249e-1"),
+T("9.73954039060780508698548127540108987785881109985102169990241290387386676882934112332475075476604334818263785540220696343e-1"),
+T("5.86420359093869515237687266954561200160006212641211187483350874672859136679499954407470935299385535928011115437979374327e-1"),
+T("-5.19500491219840443397382144913775579016253538466887540765306393159738082663675375499840773403952929977354698339617261390e-1"),
+T("-9.89013546180296021750901758474634735102493497248279924875522015911873550276888689676425102442986261848126775556194306727e-1"),
+T("-2.46947514812703938169894550153319655995779907820829748198209521180129269232387596803077057086642606505827139155491603712e-1"),
+T("7.97638583669534812597149574893980942155226403291812660315816507318428697361476484505958849067790885048775312980075497096e-1"),
+T("8.65087179683067252708187359165577777305998628817518314353161876891989239932835217904989326717355654871984067712207255166e-1"),
    }};
 
    T eg = "5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1";
@@ -154,12 +155,12 @@
    {
       static const T euler_gamma = "5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1";
       T val = sin(euler_gamma * ((100 * k) - 5000));
- T e = (data[k] == 0) ? T(ceil(fabs((val - data[k]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val - data[k]) / data[k]) / std::numeric_limits<T>::epsilon()));
+ T e = relative_error(val, data[k]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
       val = sin(-euler_gamma * ((100 * k) - 5000));
- e = (data[k] == 0) ? T(ceil(fabs((val + data[k]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val + data[k]) / -data[k]) / std::numeric_limits<T>::epsilon()));
+ e = relative_error(val, T(-data[k]));
       err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
@@ -227,12 +228,12 @@
    {
       static const T euler_gamma = "5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1";
       T val = sin((euler_gamma + k) / 53);
- T e = (small_data[k] == 0) ? T(ceil(fabs((val - small_data[k]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val - small_data[k]) / small_data[k]) / std::numeric_limits<T>::epsilon()));
+ T e = relative_error(val, small_data[k]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
       val = sin(-(euler_gamma + k) / 53);
- e = (small_data[k] == 0) ? T(ceil(fabs((val + small_data[k]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val + small_data[k]) / -small_data[k]) / std::numeric_limits<T>::epsilon()));
+ e = relative_error(val, T(-small_data[k]));
       err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
@@ -259,7 +260,7 @@
    for(unsigned k = 0; k < exact_data.size(); k++)
    {
       T val = sin(exact_data[k][0]);
- T e = (exact_data[k][1] == 0) ? T(ceil(fabs((val - exact_data[k][1]) / std::numeric_limits<T>::epsilon()))) : T(ceil(fabs((val - exact_data[k][1]) / exact_data[k][1]) / std::numeric_limits<T>::epsilon()));
+ T e = relative_error(val, exact_data[k][1]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;

Modified: sandbox/big_number/libs/multiprecision/test/test_sinh.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_sinh.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_sinh.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -10,6 +10,7 @@
 
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/array.hpp>
+#include "test.hpp"
 
 #if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
 # define TEST_MPF50
@@ -104,13 +105,13 @@
    {
       const T x = eg + k;
       T val = boost::multiprecision::sinh(x * x);
- T e = ceil(fabs((val - data[k]) / data[k]) / std::numeric_limits<T>::epsilon());
+ T e = relative_error(val, data[k]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
    }
    std::cout << "Max error was: " << max_err << std::endl;
- BOOST_TEST(max_err < 1200);
+ BOOST_TEST(max_err < 2000);
 }
 
 

Modified: sandbox/big_number/libs/multiprecision/test/test_tanh.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_tanh.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_tanh.cpp 2011-10-20 14:16:46 EDT (Thu, 20 Oct 2011)
@@ -10,6 +10,7 @@
 
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/array.hpp>
+#include "test.hpp"
 
 #if !defined(TEST_MPF50) && !defined(TEST_MPF) && !defined(TEST_BACKEND) && !defined(TEST_MPZ) && !defined(TEST_E_FLOAT) && !defined(TEST_MPFR) && !defined(TEST_MPFR_50) && !defined(TEST_MPQ)
 # define TEST_MPF50
@@ -104,13 +105,13 @@
    {
       const T x = eg + k;
       T val = boost::multiprecision::tanh(x * x);
- T e = ceil(fabs((val - data[k]) / data[k]) / std::numeric_limits<T>::epsilon());
+ T e = relative_error(val, data[k]);
       unsigned err = e.template convert_to<unsigned>();
       if(err > max_err)
          max_err = err;
    }
    std::cout << "Max error was: " << max_err << std::endl;
- BOOST_TEST(max_err < 1200);
+ BOOST_TEST(max_err < 10);
 }
 
 


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk