Description
As requested I am opening another issue for problems with following functions, but only for cpp_bin_float real valued functions:
sin
,cos
,tan
with 7e7 ULP erroracos
with 10000 ULP errorerfc
with 20000 ULP errorlgamma
with 70000 ULP error (edited)tgamma
with 10000 ULP errorfma
with 2e5 ULP error
I prepared std::vector<std::string> suspects = {……}
so that only these arguments are tested. So I'm sorry that this test program is a little longer. I can push it somewhere via git if you want.
@jzmaddock said
Yes please. Note however that most of those functions have regions that are ill-conditioned. I'm surprised about erf though.
So I do a domain check in the code below, but that's just the domain check via mathematical definition of the function. E.g. acos in (-1,1) range. But if there are some wider ill-conditioned cpp_bin_float
ranges then you tell me what are those :)
The last couple tests are done on MPFR types, to show that they have no problems, even when I reduce the tolerance to 4 ULP.
This test is done on g++-10 and Boost 1.71
#include <boost/core/demangle.hpp>
#include <boost/multiprecision/float128.hpp>
#include <boost/multiprecision/mpfr.hpp>
#include <boost/multiprecision/cpp_bin_float.hpp>
#include <iostream>
#include <string>
#include <vector>
// these suspects that I found here were generated with 207 (semi-random) bits, cpp_bin_float<62> that is.
std::vector<std::string> suspects =
{
"-99.99051044261190803828277871209611083521312159772951785429282742447111501770387897764914459929030895961457916310906347977088468929912075917569999182149214394708068576189674558918341062963008880615234375",
"-99.23390959446626271324034474274442251884471237189555648094657059216860706607230983323106368424801631883935026863224574760130807307771805691417887408046384289874060347091955236464855261147022247314453125",
"-98.9601713316877088337177445119470740578579166310219652750338812970411599649857990095222187693902055061636695929602719448563570542635141882380804268308514937244231568502783602525596506893634796142578125",
"-98.273813022182876335674961215978389185880158614907235514650235867554610737475054142604330810869605796963554540686259410168473190820224120735175598211787517991498697167429554610862396657466888427734375",
"-98.1129673249056279651265099215966864727359600855606270412253136392329234530313794427136637055560221800456208046576431258117530821299909173847892873020493030816573110097777998817036859691143035888671875",
"-97.389369764346678086481891064814826474831092962567795459730881505082734698449439138689254963656701672933811803557867845743694253575567006314050085743567864815344037321409587093512527644634246826171875",
"-95.81857221869257960935742769742992913057780233194018961846245753236156690762799658755131314850200998334040944803550122736063078540309929170741814952093887546176985414714266653390950523316860198974609375",
"-92.41884548834482351580942729503268036653297534861723287901036113912045650063200397203449032796157971583666591400004045975989150366281884624802662149806202205909629043834030426296521909534931182861328125",
"-91.1061877200439407432384615462896541336997550990506594144915374189322511915338633133119583121624515660791329437500227666881849937355906834387488978756948848299924981208874896765337325632572174072265625",
"-89.88901025192110738330790618249721807309639606773637313381141814624705166266602211251904155822175375028221083070595793995144725917986725146484809181158549739264727873599980512153706513345241546630859375",
"-89.5353901456268146780894922808504683043625998859211699302844699006615833786787620155903405554436561863769757162466938403503598928733212929892185960036262953160544897368566807926981709897518157958984375",
"-82.1735520704620443988984953466372698685913582823295765947054351112482828444196668754236587930583613773862145085498288866696315110855282598447092727081999454104808966459216890143579803407192230224609375",
"-77.4823796790540815922431050434539860561416780588691652960638531675828303613178820006138086077402642358169796090547340159455478668941626522124178433128328640096781076973542212726897560060024261474609375",
"-76.99175113943655525504236511759596519945485974092039507047416560034531419571148155966846401745208762372457862829213996244244865281367459385377136496207263084289203203258722396640223450958728790283203125",
"-74.61255333976712083091879675534822922304761149616407008730070078988643083933215168414352880237541830345893825991799418214718663934337361280342675580186924961102572229076912435630219988524913787841796875",
"-72.3148104470242378111131793549028166185391566893773764561918781174851603967015597324961371802863065721050633633189851030237069974043738081738156836369644443643193987281136969613726250827312469482421875",
"-65.6435462795664662509771573366666549161813140877948752939617569007726832786509545361560456448812909391572172265680384625360761114969384119631392422215792126281679041976957478254917077720165252685546875",
"-58.1194637727400116282382861620192645168456286573655292854115447804934531033530825341470365817522667175865233641660823248322056381392871614104021682035650111738424306029315857813344337046146392822265625",
"-46.00377253908153163234835861938988189011724937250550191704727440078450345533379528244871632668899992466976676697133833647564925859881415224025606188892635798714896011585295809709350578486919403076171875",
"-44.4018537144116355553957796775986930181198953013070477698158368990850213417187435014923789688670795285241686594695650800353491215038601488478780249088234035183091197307447828279691748321056365966796875",
"-42.178867533615277746638335956312648788666574058754668089030698639143496696692892419393689512323455361357823651939047406700172638876986456164277459200305282980007944015898857514912378974258899688720703125",
"-37.463814793675275461340264701880657547498904997758234907382436644440387185383888069692093701283418496171812743486767600476345326829809773758398740227733327893774352423950091406368301250040531158447265625",
"-36.687894664533810937311533733623204481210731875314969097117453723702620271139130018679051998429836998807714049077719477378387717033200220973951746780027503998765359138900521429604850709438323974609375",
"-28.64389272279336971899833313469911474439779953887602880275372619043693669817718560048422360489311115432830897163631478540521766172994972680472028686375514700446394400490390808045049197971820831298828125",
"-28.0049139189336880614936157837694875795078481812590699169249409778955821694343725412388088298559665974798192998478183283974952859016032716608150750782873554208841915258432209157035686075687408447265625",
"-26.27180763553655086974675201041863634842370354443985880608654015680918608411304588751537996354581477114994399729425244435651959022879036487160686066081892033421442411711410613861517049372196197509765625",
"-25.19589620543179814909094172303432814133713508768451885201830602238490586082017718958403502211165076000022756274322670476508649605244189795114035788739250985098123980510109731767443008720874786376953125",
"-25.13274460509201434480266058335104919728710461006166448957435054060930768882685992519312501100646264865618197931948935269332644328253058412301382409241950447072178054241931022261269390583038330078125",
"-24.3953393891403751990434066978288339384375573172866562212210641433035459991358198899245580781841692398778762926576347126875939333921008840292697330648373870679197772393109744371031410992145538330078125",
"-21.09522851245033636306402211225949554094174191622852088230859853405429426073319491152815162110789708135363180731077163134358817681937892456607698197182937716368487934825992624610080383718013763427734375",
"-18.99938574552839199324805802310536938840417940528040264994230879127715234997780930686638661213255462498806211545865983339025364050801922290465869751649067992947152172522606861093663610517978668212890625",
"-16.1054921663428825424335275871979183815357076427275834397442882246577003003947573289675799854994087290464911637642925175788912463196112911507347146483208575619937297229711248292005620896816253662109375",
"-15.73606255635348930406430675898903077327778525123481926630706457480564768230418298855932815114879596305648746566826709238793635624816065807957821140335105770187602847176577824939158745110034942626953125",
"-13.844342695544957837434025971838094757130400709693375931013384200015240921794309640808969294106787118008983305677558784686668901577262469676705839997599836797663452880868817373993806540966033935546875",
"-12.0108256663021959292221821504924285077679894795415928058870037494381092873899810180946465666595655424900842675906679066861586687873299236208804084527982847696754575839150902538676746189594268798828125",
"-10.00031013274038195290023947364801980860573336384093125993165793242441917674719101901475578381172139328538478579821165445665430869130966779506355287008010477201210008946219431891222484409809112548828125",
"-8.00002606729166538824643828246571667601957528380422187224925264792051768683947293015968599171373933233014603623537359584513425170094804665935239384252086272957156520835297897065174765884876251220703125",
"-6.00136682225492754251204662283943131239849406671099109862729681998415655896338341898554616420963838467993260300566362082682688543052932950197434420055032149531569485301218946915469132363796234130859375",
"-4.03935176182968248850425274573197268040942586626526838633754467790994461640466129194118835598340118294709330113984308095784822410899225766569451949983317611166111493758990036440081894397735595703125",
"-3.0240920288930329988980374744242432174547781269616617810591667842849794114087483433483690367847145810986439948789823331633666322045350227369058242087843354551669750041043016608455218374729156494140625",
"-2.45703434083386998275925378730707853886429974961703191606644158840534757638881189433235828818780863495008551032003814937228673471251368171994648347271862826902977250398407704778946936130523681640625",
"-2.45702409322290866567069073111226123857093891190759763630180185440854570661779988634018746783189304594656392773180501945370983941166634220688688556283277257129456228046393562181037850677967071533203125",
"-1.68169675859976659383108338072526819755655584974521789613087401183387429879714920504893731220566066433092139915659379637884440972895014577991321577305253685830077614582478418014943599700927734375",
"-0.8282564029863776126578656468289904548301926008360850725607385349535211657160850878019333716199903358537998263735956441731642451949396509520995591712819820502493317615488876981544308364391326904296875",
"-0.32136064705709597454683625174723961593146173639012134904467758003590583919808930814050545965484123350604583749902317747452315051081556469722141906597624489046183260398947822977788746356964111328125",
"0.46721644973365601360133602238548895907862098406622072706034309566800215546218584935514980265179575405374460581236738760590882160438856238290914946721340585134019107726999209262430667877197265625",
"0.999846935115256985099472087619410059034039136463602141692454832980536542150610828088069585167055187023555569404437106928970332167071435310425941385031029895284759856366463282029144465923309326171875",
"0.99988767201274738245735086136368521485585806605382659983192152902696406932008939599756249510654260590532728278579290850296943869294248260415662522058393880540656806221733177153510041534900665283203125",
"0.999890658691280253459563000177154110549643009678046768723093809280489994853890555289525263351943778362525321014124545828049510733153266589198126845022007746534298266993801007629372179508209228515625",
"0.999890866630185914587046276951054077223882235976803551094669700127799173507869538140351795204645068157857366025341530654308963466229817646946295966864834393016125968500773524283431470394134521484375",
"0.9998935834632539389432532416679314303104944098437646169936959501208480776770549549396436304932167485457590024069924603839254637269127683893329896050425928226423888389717831159941852092742919921875",
"0.9998937078809612793196456117613076238607542194482800109271476030303818189373028927817720019485705963490501809249485198842139120807378682861591436713538045611728011241581270951428450644016265869140625",
"0.9998938266238835248172237531591128278247832584171582274981000092413549795680158553547781577679123233133582668576009454540078156352860532955582650147430441578411119962765951640903949737548828125",
"1.31807073864746745220380666020953425708782839063532147724215402784222028983184986695417973418596170725423236711281442200052112002936531018527445826575889803824494228567942855079309083521366119384765625",
"2.05118616373376822351059060334033552537053819234188264727312593977696266313461209366740347658511550317741748782578284208029622842257369906721179886195782958121548722463245439939782954752445220947265625",
"14.81907944221615795927300817825273323995258820785195324332346982881369733699449486066221176276821157545838038881434799007345102544573284121878574555603790032496692996577536405311548151075839996337890625",
"28.86382646919547451704802146558570204667176129200120383736328754193446432280602654739983984395786925252355041424685510746821564041731449426350230758472895022277715515457430228707380592823028564453125",
"37.714117388111989956041102504146323181250085280470547904334284311710392522527934075592357284175540227603002107141232187606083931450205311188420619775073138932840188797257496844395063817501068115234375",
"37.755692600976890509060126539791454024057262140474811481640356032121125141911161464415653798084260615297277298486172253135984357874602234962374017127404099967470652021717114621424116194248199462890625",
"43.1803311978604564169383897713532689475466446393217746344408051982016068191582531106463642440364694513352131182034723647935400394961893836912807402147128875424808569505330524407327175140380859375",
"44.8136269782289928625179989261586968859704136307989349216436641020178036768807849394357169505890377033019777761450383475357716008285913212762440013978080310193437274524086433302727527916431427001953125",
"47.7466833592842141724124786289501525735591596956904479800788632710915981013637380490409808488674608936498347095426906680888360693051845194282363447716043526277730768558882346042082644999027252197265625",
"48.5373479167760837984751589435425712042885137507272816756492359179219111789370782710753352832578889227710125612304041008705021198073669031963387872820418281736599974696133585894131101667881011962890625",
"50.2654237499756733391222254122805320113428095281996770142576041928720328847038073008540751164256335141210504687992703586601047641219781397261165193341597270449729040198150187279679812490940093994140625",
"66.475153220534004851292526233200206437375861594380699566663661143294973948983537723870961684073064116387026367864722840661735428670419848958023413614398867727169062380454533922602422535419464111328125",
"81.6813903871233164206231157958374137736575469952408038962124876646551135758586852641465094333999801948744979304163225462391891136623683615941281815737538089523643580758260895890998654067516326904296875",
"90.5055529204410608252721620806883201091798030906746366296219309300593773762484102001340104622297142486139344072193634452555957932797466287389178621999435495602305545848054180169128812849521636962890625",
"91.1061928073599934918157143693445377704705143712968984369886992676466700842560738586081200771883133480499146932659993234293192141302496948118607650536006329505291090331553505166084505617618560791015625",
"91.73096013967822637902416462228509184659994913333375698315287016094450586596998400386341289481248526500038762543132207961366660355580285937087410175116695986753667657609412344754673540592193603515625",
"96.006219145174968389135648559819121058721694089272516452196945753282582422246476865909482984419546829495310684769521880110885806790842600551509460451587668161459176996430642248014919459819793701171875",
"97.389368411290298402830640798173079547959579858387300352046564554983962377373474417232814245397912161320988898124674543550781585423318179803285572760545009906273106192742261555395089089870452880859375",
"98.0989550614355490188345206791598701919776512387165808297572266422581898406437029731615350650185511553954839433926255993281461118980368400993687322616830094970143127941497596111730672419071197509765625",
"98.96015456301280320862779505809196791836643290291948125688893156142059072001012434950259767595461620194995593174473903568075803746371943076148585708991150589920737790095017771818675100803375244140625",
"99.215809318714254781755417250857229813252158084760395373122363660557432217805933289849573751176675695362239479172525090760908689972963504911406316481201661289408832988812037001480348408222198486328125",
"99.526174807950546775689149433642956463205915643028662653550636461692965655300301728228212687122980789586022357026446091170053596694888030662864493749047536713843442601756805743207223713397979736328125"
};
std::vector<std::string> fma_suspects =
{"-65.6435462795664662509771573366666549161813140877948752939617569007726832786509545361560456448812909391572172265680384625360761114969384119631392422215792126281679041976957478254917077720165252685546875",
"-21.09522851245033636306402211225949554094174191622852088230859853405429426073319491152815162110789708135363180731077163134358817681937892456607698197182937716368487934825992624610080383718013763427734375",
"1.31807073864746745220380666020953425708782839063532147724215402784222028983184986695417973418596170725423236711281442200052112002936531018527445826575889803824494228567942855079309083521366119384765625",
"37.755692600976890509060126539791454024057262140474811481640356032121125141911161464415653798084260615297277298486172253135984357874602234962374017127404099967470652021717114621424116194248199462890625",
"0.46721644973365601360133602238548895907862098406622072706034309566800215546218584935514980265179575405374460581236738760590882160438856238290914946721340585134019107726999209262430667877197265625",
"43.1803311978604564169383897713532689475466446393217746344408051982016068191582531106463642440364694513352131182034723647935400394961893836912807402147128875424808569505330524407327175140380859375",
"-0.8282564029863776126578656468289904548301926008360850725607385349535211657160850878019333716199903358537998263735956441731642451949396509520995591712819820502493317615488876981544308364391326904296875",
"-82.1735520704620443988984953466372698685913582823295765947054351112482828444196668754236587930583613773862145085498288866696315110855282598447092727081999454104808966459216890143579803407192230224609375",
"-3.0240920288930329988980374744242432174547781269616617810591667842849794114087483433483690367847145810986439948789823331633666322045350227369058242087843354551669750041043016608455218374729156494140625",
"44.8136269782289928625179989261586968859704136307989349216436641020178036768807849394357169505890377033019777761450383475357716008285913212762440013978080310193437274524086433302727527916431427001953125",
"37.714117388111989956041102504146323181250085280470547904334284311710392522527934075592357284175540227603002107141232187606083931450205311188420619775073138932840188797257496844395063817501068115234375",
"-77.4823796790540815922431050434539860561416780588691652960638531675828303613178820006138086077402642358169796090547340159455478668941626522124178433128328640096781076973542212726897560060024261474609375",
"-1.68169675859976659383108338072526819755655584974521789613087401183387429879714920504893731220566066433092139915659379637884440972895014577991321577305253685830077614582478418014943599700927734375",
"48.5373479167760837984751589435425712042885137507272816756492359179219111789370782710753352832578889227710125612304041008705021198073669031963387872820418281736599974696133585894131101667881011962890625"};
template <typename Type, typename Reference, typename Tol> void test(Tol tolerance)
{
std::cout << "\n========================\nTesting:\n " << boost::core::demangle(typeid(Type).name()) << " against:\n " << boost::core::demangle(typeid(Reference).name()) << "\n";
for (const auto& str : suspects) {
//std::cout << str << "\n";
Type arg_1(str);
Reference arg_ref_1(str);
if ((arg_1 != static_cast<Type>(arg_ref_1)) or (static_cast<Reference>(arg_1) != arg_ref_1)) {
std::cout << "These are different numbers, cannot work with that. It is because 'suspects' were prepared with 207 semi-random bits, 62 decimal places that is. Some extra cutting and "
"casting could be done here to fix this.\n";
exit(1);
}
/* skip extra cutting and casting, I didn't test that.
if ((arg_1 != static_cast<Type>(arg_ref_1)) or (static_cast<Reference>(arg_1) != arg_ref_1)) {
arg_1 = static_cast<Type>(arg_ref_1);
arg_ref_1 = static_cast<Reference>(arg_1);
}*/
#define TEST_FUNCTION(func) \
{ \
Type val_1 = boost::multiprecision::func(arg_1); \
Reference val_ref_1 = boost::multiprecision::func(arg_ref_1); \
if (boost::multiprecision::isfinite(val_1) and (boost::multiprecision::isfinite(val_ref_1))) { \
auto ulp = boost::math::float_distance(static_cast<Type>(val_ref_1), val_1); \
if ((ulp > tolerance) or (ulp < -tolerance)) { \
std::cout << std::setw(7) << #func << " ULP dist = " << std::setw(15) << ulp << " argument = " << arg_1 /* str */ << "\n"; \
} \
} else if ((boost::multiprecision::isfinite(val_1) and (not(boost::multiprecision::isfinite(val_ref_1))))) { \
std::cout << std::setw(7) << #func << " : lower precision is a finite value, higher isn't (only the opposite makes sense)" \
<< " argument = " << arg_1 /* str */ << "\n"; \
} \
}
TEST_FUNCTION(sin)
TEST_FUNCTION(cos)
TEST_FUNCTION(tan)
// acos domain check (-1,1)
if ((arg_1 > static_cast<Type>(-1)) and (arg_1 < static_cast<Type>(1))) {
TEST_FUNCTION(acos)
}
TEST_FUNCTION(erfc)
// gamma domain check skip negative integers
if (not((arg_1 < 0) and (static_cast<Type>(boost::multiprecision::round(arg_1)) == arg_1))) {
TEST_FUNCTION(tgamma)
if(boost::multiprecision::tgamma(arg_1) > 0 ) {
TEST_FUNCTION(lgamma)
}
}
// I just copy that macro, but function fma(…,…,…) uses three args
for (const auto& str2 : fma_suspects) {
Type arg_2(str2);
Reference arg_ref_2(str2);
for (const auto& str3 : fma_suspects) {
Type arg_3(str3);
Reference arg_ref_3(str3);
{
Type val_1 = boost::multiprecision::fma(arg_1, arg_2, arg_3);
Reference val_ref_1 = boost::multiprecision::fma(arg_ref_1, arg_ref_2, arg_ref_3);
if (boost::multiprecision::isfinite(val_1)) {
auto ulp = boost::math::float_distance(static_cast<Type>(val_ref_1), val_1);
if ((ulp > tolerance) or (ulp < -tolerance)) {
std::cout << std::setw(7) << "fma"
<< " ULP dist = " << std::setw(15) << ulp << " argument = " << arg_1 << " , " << arg_2 << " , " << arg_3 /* str, str2, str3 */ << "\n";
}
}
}
}
}
}
std::cout << "DONE\n";
#undef TEST_FUNCTION
}
int main()
{
test<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<62>, boost::multiprecision::et_off>, boost::multiprecision::mpfr_float_500>(10000);
test<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<62>, boost::multiprecision::et_off>,
boost::multiprecision::number<boost::multiprecision::cpp_bin_float<124>, boost::multiprecision::et_off>>(10000);
test<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<62>>, boost::multiprecision::mpfr_float_500>(10000);
// MPFR works
test<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<62, boost::multiprecision::allocate_stack>, boost::multiprecision::et_off>, boost::multiprecision::mpfr_float_500>(4);
test<boost::multiprecision::mpfr_float_100, boost::multiprecision::mpfr_float_500>(4);
// we might test these later too. Won't work now, because suspects data was prepared for 62 decimal places.
//test<boost::multiprecision::float128, boost::multiprecision::mpfr_float_50>(4);
//test<boost::multiprecision::mpfr_float_50, boost::multiprecision::mpfr_float_100>(4);
}
EDIT: Here's my (fixed lgamma domain) output:
========================
Testing:
boost::multiprecision::number<boost::multiprecision::backends::cpp_bin_float<62u, (boost::multiprecision::backends::digit_base_type)10, void, int, 0, 0>, (boost::multiprecision::expression_template_option)0> against:
boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<500u, (boost::multiprecision::mpfr_allocation_type)1>, (boost::multiprecision::expression_template_option)1>
cos ULP dist = -1.05074e+07 argument = -98.9602
tan ULP dist = 1.01564e+07 argument = -98.9602
sin ULP dist = -1.67319e+07 argument = -97.3894
tan ULP dist = 1.67319e+07 argument = -97.3894
cos ULP dist = 1.6665e+07 argument = -95.8186
tan ULP dist = 8.78195e+06 argument = -95.8186
sin ULP dist = 4.3195e+07 argument = -91.1062
tan ULP dist = -4.3195e+07 argument = -91.1062
cos ULP dist = -1.82969e+07 argument = -89.5354
tan ULP dist = -3.58613e+07 argument = -89.5354
cos ULP dist = 5.33625e+07 argument = -58.1195
tan ULP dist = 5.97394e+07 argument = -58.1195
fma ULP dist = 15802 argument = -28.6439 , 1.31807 , 37.7557
sin ULP dist = 1.07071e+06 argument = -25.1327
tan ULP dist = 1.07071e+06 argument = -25.1327
tgamma ULP dist = -10271 argument = -15.7361
fma ULP dist = -194768 argument = -0.321361 , -65.6435 , -21.0952
acos ULP dist = -10075 argument = 0.999891
lgamma ULP dist = 13963 argument = 1.31807
fma ULP dist = -26108 argument = 14.8191 , -3.02409 , 44.8136
sin ULP dist = -527053 argument = 50.2654
tan ULP dist = -527053 argument = 50.2654
sin ULP dist = -1.74569e+06 argument = 81.6814
tan ULP dist = -1.74569e+06 argument = 81.6814
sin ULP dist = -5.39938e+06 argument = 91.1062
tan ULP dist = 5.39938e+06 argument = 91.1062
erfc ULP dist = 20408 argument = 91.731
erfc ULP dist = 22029 argument = 96.0062
sin ULP dist = 8.36595e+06 argument = 97.3894
tan ULP dist = -8.36595e+06 argument = 97.3894
erfc ULP dist = 20748 argument = 98.099
cos ULP dist = -2.62684e+06 argument = 98.9602
tan ULP dist = -1.55465e+06 argument = 98.9602
erfc ULP dist = 21844 argument = 99.2158
erfc ULP dist = 22085 argument = 99.5262
DONE
========================
Testing:
boost::multiprecision::number<boost::multiprecision::backends::cpp_bin_float<62u, (boost::multiprecision::backends::digit_base_type)10, void, int, 0, 0>, (boost::multiprecision::expression_template_option)0> against:
boost::multiprecision::number<boost::multiprecision::backends::cpp_bin_float<124u, (boost::multiprecision::backends::digit_base_type)10, void, int, 0, 0>, (boost::multiprecision::expression_template_option)0>
cos ULP dist = -1.05074e+07 argument = -98.9602
tan ULP dist = 1.01564e+07 argument = -98.9602
sin ULP dist = -1.67319e+07 argument = -97.3894
tan ULP dist = 1.67319e+07 argument = -97.3894
cos ULP dist = 1.6665e+07 argument = -95.8186
tan ULP dist = 8.78195e+06 argument = -95.8186
sin ULP dist = 4.3195e+07 argument = -91.1062
tan ULP dist = -4.3195e+07 argument = -91.1062
cos ULP dist = -1.82969e+07 argument = -89.5354
tan ULP dist = -3.58613e+07 argument = -89.5354
cos ULP dist = 5.33625e+07 argument = -58.1195
tan ULP dist = 5.97394e+07 argument = -58.1195
fma ULP dist = 15802 argument = -28.6439 , 1.31807 , 37.7557
sin ULP dist = 1.07071e+06 argument = -25.1327
tan ULP dist = 1.07071e+06 argument = -25.1327
tgamma ULP dist = -10271 argument = -15.7361
fma ULP dist = -194768 argument = -0.321361 , -65.6435 , -21.0952
acos ULP dist = -10075 argument = 0.999891
lgamma ULP dist = 13963 argument = 1.31807
fma ULP dist = -26108 argument = 14.8191 , -3.02409 , 44.8136
sin ULP dist = -527053 argument = 50.2654
tan ULP dist = -527053 argument = 50.2654
sin ULP dist = -1.74569e+06 argument = 81.6814
tan ULP dist = -1.74569e+06 argument = 81.6814
sin ULP dist = -5.39938e+06 argument = 91.1062
tan ULP dist = 5.39938e+06 argument = 91.1062
erfc ULP dist = 20408 argument = 91.731
erfc ULP dist = 22029 argument = 96.0062
sin ULP dist = 8.36595e+06 argument = 97.3894
tan ULP dist = -8.36595e+06 argument = 97.3894
erfc ULP dist = 20748 argument = 98.099
cos ULP dist = -2.62684e+06 argument = 98.9602
tan ULP dist = -1.55465e+06 argument = 98.9602
erfc ULP dist = 21844 argument = 99.2158
erfc ULP dist = 22085 argument = 99.5262
DONE
========================
Testing:
boost::multiprecision::number<boost::multiprecision::backends::cpp_bin_float<62u, (boost::multiprecision::backends::digit_base_type)10, void, int, 0, 0>, (boost::multiprecision::expression_template_option)0> against:
boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<500u, (boost::multiprecision::mpfr_allocation_type)1>, (boost::multiprecision::expression_template_option)1>
cos ULP dist = -1.05074e+07 argument = -98.9602
tan ULP dist = 1.01564e+07 argument = -98.9602
sin ULP dist = -1.67319e+07 argument = -97.3894
tan ULP dist = 1.67319e+07 argument = -97.3894
cos ULP dist = 1.6665e+07 argument = -95.8186
tan ULP dist = 8.78195e+06 argument = -95.8186
sin ULP dist = 4.3195e+07 argument = -91.1062
tan ULP dist = -4.3195e+07 argument = -91.1062
cos ULP dist = -1.82969e+07 argument = -89.5354
tan ULP dist = -3.58613e+07 argument = -89.5354
cos ULP dist = 5.33625e+07 argument = -58.1195
tan ULP dist = 5.97394e+07 argument = -58.1195
fma ULP dist = 15802 argument = -28.6439 , 1.31807 , 37.7557
sin ULP dist = 1.07071e+06 argument = -25.1327
tan ULP dist = 1.07071e+06 argument = -25.1327
tgamma ULP dist = -10271 argument = -15.7361
fma ULP dist = -194768 argument = -0.321361 , -65.6435 , -21.0952
acos ULP dist = -10075 argument = 0.999891
lgamma ULP dist = 13963 argument = 1.31807
fma ULP dist = -26108 argument = 14.8191 , -3.02409 , 44.8136
sin ULP dist = -527053 argument = 50.2654
tan ULP dist = -527053 argument = 50.2654
sin ULP dist = -1.74569e+06 argument = 81.6814
tan ULP dist = -1.74569e+06 argument = 81.6814
sin ULP dist = -5.39938e+06 argument = 91.1062
tan ULP dist = 5.39938e+06 argument = 91.1062
erfc ULP dist = 20408 argument = 91.731
erfc ULP dist = 22029 argument = 96.0062
sin ULP dist = 8.36595e+06 argument = 97.3894
tan ULP dist = -8.36595e+06 argument = 97.3894
erfc ULP dist = 20748 argument = 98.099
cos ULP dist = -2.62684e+06 argument = 98.9602
tan ULP dist = -1.55465e+06 argument = 98.9602
erfc ULP dist = 21844 argument = 99.2158
erfc ULP dist = 22085 argument = 99.5262
DONE
========================
Testing:
boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<62u, (boost::multiprecision::mpfr_allocation_type)0>, (boost::multiprecision::expression_template_option)0> against:
boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<500u, (boost::multiprecision::mpfr_allocation_type)1>, (boost::multiprecision::expression_template_option)1>
DONE
========================
Testing:
boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<100u, (boost::multiprecision::mpfr_allocation_type)1>, (boost::multiprecision::expression_template_option)1> against:
boost::multiprecision::number<boost::multiprecision::backends::mpfr_float_backend<500u, (boost::multiprecision::mpfr_allocation_type)1>, (boost::multiprecision::expression_template_option)1>
DONE