[flang] Fix layout of 128-bit IEEE-754 floating-point values

Original-commit: flang-compiler/f18@c95c45704e
Reviewed-on: https://github.com/flang-compiler/f18/pull/1021
This commit is contained in:
peter klausler 2020-02-24 17:04:54 -08:00
parent 844e7628b0
commit b7a5b5c7b6
11 changed files with 80 additions and 129 deletions

View File

@ -26,7 +26,7 @@ static constexpr int BitsForBinaryPrecision(int binaryPrecision) {
case 53: return 64; // IEEE double precision: 1+11+52
case 64: return 80; // x87 extended precision: 1+15+64
case 106: return 128; // "double-double": 2*(1+11+52)
case 112: return 128; // IEEE quad precision: 1+16+111
case 113: return 128; // IEEE quad precision: 1+15+112
default: return -1;
}
}
@ -43,7 +43,7 @@ static constexpr int MaxDecimalConversionDigits(int binaryPrecision) {
case 53: return 751;
case 64: return 11495;
case 106: return 2 * 751;
case 112: return 22981;
case 113: return 11530;
default: return -1;
}
}
@ -79,7 +79,7 @@ public:
static_assert(binaryPrecision > 0);
static_assert(exponentBits > 1);
static_assert(exponentBits <= 16);
static_assert(exponentBits <= 15);
};
}

View File

@ -92,9 +92,9 @@ extern template ConversionToDecimalResult ConvertToDecimal<53>(char *, size_t,
extern template ConversionToDecimalResult ConvertToDecimal<64>(char *, size_t,
enum DecimalConversionFlags, int, enum FortranRounding,
BinaryFloatingPointNumber<64>);
extern template ConversionToDecimalResult ConvertToDecimal<112>(char *, size_t,
extern template ConversionToDecimalResult ConvertToDecimal<113>(char *, size_t,
enum DecimalConversionFlags, int, enum FortranRounding,
BinaryFloatingPointNumber<112>);
BinaryFloatingPointNumber<113>);
template<int PREC> struct ConversionToBinaryResult {
BinaryFloatingPointNumber<PREC> binary;
@ -115,7 +115,7 @@ extern template ConversionToBinaryResult<53> ConvertToBinary<53>(
const char *&, enum FortranRounding = RoundNearest);
extern template ConversionToBinaryResult<64> ConvertToBinary<64>(
const char *&, enum FortranRounding = RoundNearest);
extern template ConversionToBinaryResult<112> ConvertToBinary<112>(
extern template ConversionToBinaryResult<113> ConvertToBinary<113>(
const char *&, enum FortranRounding = RoundNearest);
} // namespace Fortran::decimal
extern "C" {

View File

@ -96,6 +96,6 @@ extern template class Complex<Real<Integer<16>, 8>>;
extern template class Complex<Real<Integer<32>, 24>>;
extern template class Complex<Real<Integer<64>, 53>>;
extern template class Complex<Real<Integer<80>, 64>>;
extern template class Complex<Real<Integer<128>, 112>>;
extern template class Complex<Real<Integer<128>, 113>>;
}
#endif // FORTRAN_EVALUATE_COMPLEX_H_

View File

@ -367,7 +367,7 @@ extern template class Real<Integer<16>, 8>; // the "other" half format
extern template class Real<Integer<32>, 24>; // IEEE single
extern template class Real<Integer<64>, 53>; // IEEE double
extern template class Real<Integer<80>, 64>; // 80387 extended precision
extern template class Real<Integer<128>, 112>; // IEEE quad
extern template class Real<Integer<128>, 113>; // IEEE quad
// N.B. No "double-double" support.
}
#endif // FORTRAN_EVALUATE_REAL_H_

View File

@ -275,7 +275,7 @@ public:
template<>
class Type<TypeCategory::Real, 16> : public TypeBase<TypeCategory::Real, 16> {
public:
using Scalar = value::Real<value::Integer<128>, 112>;
using Scalar = value::Real<value::Integer<128>, 113>;
};
// The KIND type parameter on COMPLEX is the kind of each of its components.

View File

@ -370,9 +370,9 @@ template ConversionToDecimalResult ConvertToDecimal<53>(char *, std::size_t,
template ConversionToDecimalResult ConvertToDecimal<64>(char *, std::size_t,
enum DecimalConversionFlags, int, enum FortranRounding,
BinaryFloatingPointNumber<64>);
template ConversionToDecimalResult ConvertToDecimal<112>(char *, std::size_t,
template ConversionToDecimalResult ConvertToDecimal<113>(char *, std::size_t,
enum DecimalConversionFlags, int, enum FortranRounding,
BinaryFloatingPointNumber<112>);
BinaryFloatingPointNumber<113>);
extern "C" {
ConversionToDecimalResult ConvertFloatToDecimal(char *buffer, std::size_t size,

View File

@ -399,7 +399,7 @@ template ConversionToBinaryResult<53> ConvertToBinary<53>(
const char *&, enum FortranRounding);
template ConversionToBinaryResult<64> ConvertToBinary<64>(
const char *&, enum FortranRounding);
template ConversionToBinaryResult<112> ConvertToBinary<112>(
template ConversionToBinaryResult<113> ConvertToBinary<113>(
const char *&, enum FortranRounding);
extern "C" {

View File

@ -101,5 +101,5 @@ template class Complex<Real<Integer<16>, 8>>;
template class Complex<Real<Integer<32>, 24>>;
template class Complex<Real<Integer<64>, 53>>;
template class Complex<Real<Integer<80>, 64>>;
template class Complex<Real<Integer<128>, 112>>;
template class Complex<Real<Integer<128>, 113>>;
}

View File

@ -520,5 +520,5 @@ template class Real<Integer<16>, 8>;
template class Real<Integer<32>, 24>;
template class Real<Integer<64>, 53>;
template class Real<Integer<80>, 64>;
template class Real<Integer<128>, 112>;
template class Real<Integer<128>, 113>;
}

View File

@ -29,8 +29,8 @@ module m
deps10 = 5.42101086242752217003726400434970855712890625e-20_10
real(16), parameter :: &
eps16 = epsilon(0._16), &
zeps16 = real(z'3fc78000000000000000000000000000', kind=16), &
deps16 = 1.925929944387235853055977942584927318538101648215388195239938795566558837890625e-34_16
zeps16 = real(z'3f8e0000000000000000000000000000', kind=16), &
deps16 = 9.629649721936179265279889712924636592690508241076940976199693977832794189453125e-35_16
logical, parameter :: test_eps2 = eps2 == zeps2 .and. eps2 == deps2
logical, parameter :: test_eps3 = eps3 == zeps3 .and. eps3 == deps3
logical, parameter :: test_eps4 = eps4 == zeps4 .and. eps4 == deps4
@ -125,106 +125,57 @@ module m
&5325423859110896247108853858086888377772586485641459342621210866475884892600317623459607695088491496&
&6244415660441955208681198977024e4932_10
real(16), parameter :: &
ahuge16 = huge(0._16), zahuge16 = real(z'7fff7fffffffffffffffffffffffffff', kind=16), &
dahuge16 = 1.4154610310449547890015530277449513287402522312014583583863873452370673496090517844595674241105526619&
&5316741942296713234339847173043444610109053451307461326030568532269393756935971597477179751917262481&
&9352114171249119710791528826008514763128252507906157761158330471593133360520566465839598159704790361&
&8052216473233827726396998249642738685081537609877654130679009320149945501056683481052234280369184890&
&5600784088324331956396165189067350444857059625918182061259630449033723034922117505897765689572130343&
&6442900178897829054258075776096285494374231192475505398864394612619318718669868907615189244643178364&
&9604710976258237438709882933414201622978713022975908448898269286373397175572572843473932165513894328&
&0948775427139028319745676136738066595818634893585336670047942640579585732561265895169788288873968502&
&3576409450602037731566868670343358720132085137732083365284366309191514754276902232302595183222780229&
&0333048746295176633732590892271134921001816237945675046107354701982076491636207145766942241484852876&
&8086489045974168028871375519412956556734569711277377659269966781151202506367906250771838987905542729&
&9602633739292957854646574862022345808897851021953319762924371865024136126553409742233338383148939476&
&2688819583034676283720590690321437702466211493942477839239904785467381975953431360199181632139817087&
&1675085388306946402985966654686374017597361994515490028221221197873309065711452256943483997268156661&
&4251522601981091437164454815585766387477985848066653010274015762006422743531061320328958737883350699&
&5010107953612418870689506323691217683866631324712647102533109103896945673048537987294807465898328021&
&0616399905018381133672495392016893435858086953047467302012798815167555583471558849452903240275817359&
&7412600246880120097460997601280569422971588083755852211710169314345911644907180640214262742781303093&
&6362054083426905944815062311426831879988031400740033624376500891481190403873103717439643860930434152&
&0077820977089318080209161337954445502789934971878811641353709185004519914977577688820318078268550811&
&9598842219332616175613533636799875893648266143272209859623766305070288663132625316020772779359622743&
&6981030373132763462837652106194804931955311030759723858460597094396859076238402414307660975253097132&
&8698643152225068610430793799791351450546432634372714107713137332348308355668038997851202770977262560&
&6860655592065973411067851629502656906251604510378685022379816969935014362348544555586522272088499721&
&9946444206136083948321352132790842341486712676660929539344838800833207748229649079300799848460228620&
&9317916049805688735829248332080887463530900166033204573480074339495592738215902398384614205016081150&
&6669327808418122123950416238344051511059531020385411336197538432312088162779143008762730602999224040&
&4412462631215227731882153726267258980995290409075434047558959478172735835465203332540303097147035552&
&5666711990525067812075528567351636372299669796556262498468798624564731519949881412251505923493700744&
&6335216604198320142967929437627737857666675125232132004943938027381035739733071077389290829983249430&
&9929671156285733762483649064261848981602065505963476296523983015653616082982446966218901161161205188&
&0573600170377567179171204447290536296387610124123253094661730508794512413417917215234868180985445947&
&4633611169558495590616526594210716678969741229385520704603028673106854460886311076850901072143976966&
&6670653340074110727042938673600505240289417987265120625262935190175503280434524070893838237104432038&
&7277721187068571883463249210788857422002436533794328830424210014284256017507940795564055131778982162&
&2057329034192487819427904384064457476669697518270041324739893645003100081320531996273644177857645536&
&8545042222437577676482965113248928599178769221842229576106346149044548609079571934297226553085916258&
&7592543596965131548109725448343837961730187194350398048494910675432603696794370092723457745633520895&
&5119608085204333293851879810252603015301753358273689011732017729549391344820270439201073177077719806&
&6340808266346052755156509338328217335355010644405352755527544829502078548861021691811911472766970454&
&1126722373686640238868728507802237164806166737169811286535298575549796654582990432275142847727629502&
&1305769671663557289499368071930128517595842219011940342211409668478145343257173098710205665337736566&
&7695994299658695511962006986219821529127829161089064469294254157734218514131756969922934643982128786&
&2715171334655164118356373428019349203374943169393056179361968313211330781317671346402999475798391627&
&7899704387839522461273739469298912609371545163597105274885675371149316619814184131715268620939484405&
&4032822037910079156926925384052248020095121565015480766860393059726428647308949687836979970427915464&
&4264625542574505988870728965217856989288717655724378129280385306319189930760735776751678832851307548&
&0329607523670401065187600417105444319087401626053234839268127494935061885924159151772184284570819457&
&9765358561330329205363145261773965226880523298786386620674889009587176503669008414757444001413680605&
&1851754109107612931858580108997222201353234246355066745929992414298433627776673565501154849803765982&
&3801743520677023503489041175120829329692997134458297062148957929737209809196458870294106726869032085&
&7789703094882329377767630717523835645468121709209222839288061729452480299859659067904004155322262027&
&4942016841932467005817058434662245916974636886994084629484965489954062257150707733514203824510029893&
&0740188138973309464198336206180093073990056649880937698690357135529391353848482852684893681528382991&
&0410280771732290741176568547605485911343042882835702704191107389084055677618161337761939546366170150&
&8064781253559946842752977101984760297902666892353040900170187885831791071277065381487511702153859041&
&5299813558768597766083566649688989266040033065035240732139305422496656316421603624955865828341705144&
&3447994139174194712038660873812088215000697427262799495041365132243338960326526617370362693352900229&
&5839660406183978610341744635787604399627725957535437386160926670026801543280519042677441316699480894&
&4875931667388354376924131257775463750780942146112953413750161644209045078267855172649330717659424934&
&8335712735674451357884496678904100317012827438683814373992652581881866811580622571804449391481344574&
&8721113352345494414054446470032427805567908094831174795204261577836387511406006137595003048602258126&
&7574174240943346072781646716338402483610109902716905722880495175295252854374708163967596343005823957&
&4178083920280304911846453277681629032012659221856535496262316447548683056149679053220966081343915763&
&6618388485315900488605284740175857970500838688820831776374452618973739739617720957620005981443081902&
&4300636730721404743123197614003206963487294419744356022978269747190299245009057165700504871383191949&
&4899374942288264992976945103110345290533057003941954989124658125216431980606017233763887218072751504&
&7096960229110614316970153571571481206941090011829947032962703662183625088631507092427471435324068470&
&0366844465251076175358580515701393054153420428006834812855173272409462525200355138959896149898062525&
&2210628999335118130478060363668307275831118339581618716511127649271497546196039918772873373199382754&
&6560828617244201387568777027698045385338478763220413303633453325803060889236256471072252843526783119&
&3479871927503164671562194351641764632839321378419898279406392257259948038445867866022404201010548148&
&7253397872999082316105642775727365630729430694476221318450355038042498725633142324796624876140016499&
&3630315406642793862426329905517326187048203464559341824317026461223979145994800153463344219940539205&
&8817280808635659115943320567223211441185330248489643784516019287510770248820455510778539577940252666&
&8183267612737208040264783872625984696777713170768969342562651487622257641705902318612115711079338922&
&2493638262892467174711936785452484818671226836798093117387826527910160787492368254620398137406505131&
&8731988042354812033108407558675436962949740512319483298252234589352170375247787814835721268045446829&
&2317117377251138299913201780559797753723849597826002363700794792393814430199924797858736790730058164&
&9952115153236795221485683501836480463808149826963803445797953052814946094155785057280525607436938816&
&8429022866291042876643873792538883921257534909031812560345020981065950461122018135436055807910398208&
&1484855520256575276221518623542883183408040492631138649359729684960991172376968732880996978620285511&
&8920978864722624039207631304837709254566567316280789050587533720412634195873847049653211138198244266&
&0719308767951120142177649511668883859734091231860247534722574046015100358565612400275756547152074564&
&1633137898850424421600859605265441281300920250103584929436220562511251780317859133490449800210440206&
&3981850043050466311875810414734973403058771563153667133211228742703665404508238629870510947427656995&
&8638542779689576904473234941595273107383541712176187177722929884736371754403934807195232649597205636&
&7221673933010790346005001099664009818203015805631886046528599114745693012019712138121354212324790087&
&6231390929321586247720337913367593147267683928201056451758630035154869092151561740273050582062026461&
&9572049643976530665071930187197763438414695944410131097851490700907933723704516209591343059105381927&
&6905146017463471917031994260130109135398832398868757935821801928877154665144538645512469367057022196&
&6054756561099772143655047379026794640167482518879370689566268763892362268011507829185486417838902115&
&2013045682596657873774794142783874686585931915497399076756434719515907361068265152702994177444969608&
&9592887399294629417678853384234804422154039327343881374143794048281132753541259730778406832518482134&
&4637540401952767039481570552371988138457076195431968762699987960258703705461489278791473966013233379&
&6757285178848543455309032854535650058524208397901319574386300684931853011117241480422198239039503450&
&5655663330591727042233318955458942000042598046293770136501981539240756523705635887060941113869993907&
&1751151952076710851450505936665537567847881544310871209165764039670118474872200059013387628379850978&
&2307116366065133838722169400801537852265629436915335433281339392e9864_16
ahuge16 = huge(0._16), zahuge16 = real(z'7ffeffffffffffffffffffffffffffff', kind=16), &
dahuge16 = 1.1897314953572317650857593266280070161964690526416940455296988842121635797553123923249740128484620735&
&2590203356474912685975526543357380446267269875194526149085346195872502126284586579940540449357468156&
&6096686172574953791792292256220777095858112702436475442537092608935138247345677279593806773692330094&
&6157461197257841728898925219399207576542048645656733564522472781522888677006389355954564966995114417&
&5290960687851325094831139688610052683309212868397475219226638679188087369434307734815556410166997113&
&8512786874753496996549221727686770196551512812712488289469952298031867469924683981576664562667786719&
&0614996396303416570983054252372208766646300878087672561828032202122199248523759030495209113959109189&
&2120527349676858811903011159301878936803923201167140417584510885470696521560577711351625740481881769&
&5075025715299705916714352103671782759119316034498392169720631800164034124698918142227577300459309880&
&4547151796062998955075830758511951858579711731676769660579988993526318854177162953020146688023840758&
&4603622660648014297759540713505037980864913015716402406031178690879637251033587351277479527574859541&
&7572920936651398752709055215663939505589207804914540432978557623565645991208599669097180808881920063&
&7227714312184890119222096790535459636284173260024397328029395243137866685140273814343210366365711716&
&7042358647275956123197079396783927914728272019537706060212263845788320480934171752680963925353944773&
&0280863675704796054050525162959099932535265586464682793821550087166946662209865086040990507131145474&
&2674110428395423227629949387596131127438371928396826762575553883728144908453957471281620658715882191&
&0888724011665136196205080002917629993882608241754751673226993047313326125892184551681523545535431045&
&8114528303607394526100730578774092094736822286015459361126642549541799645333882549670764145955017051&
&3308000612538651401801532119293614565003435147928902055320217600618822326157365533772949809740595905&
&2018796145979938674151302850593441045360348019238334932111517181105100410859283099181138255290906487&
&3029533418691087118107895004426881765865961841419267486232005929789956207494587649901662172318722999&
&4845123258260870315619363836897406865052797752967893316136838227985970406516005241290251498948731531&
&9694209505667084746692764481259650670012944357951247923062137397808873125708979962290218382410541293&
&0483065603459863120371744282301377070153823878609951218937542956964157950988060608985782910656238116&
&1422035741047574518281708048752574462041283485138290827317223641893804935883389476643706232798207558&
&3164620541748839306283820178954721954319445090211369992596537690819279215212221282457887933650687528&
&8617303469517112245451315447164280392523574962804175375927948971096983905242318797695347043690474223&
&8132665056397611644388442665313646268512196339944341540985621273959361844218214442734315345078601616&
&1428702272098406156966033337278824103713153807737748015267058325792053556997331818811268567331899796&
&7497786786001251403873023920127717626858627038170562807276699687356274072773403132694104831615879354&
&3958115858251128378415632227616233344591881315378823557324830300859768903829697344762145934281912127&
&1714133304757786755221851743106484876037319629031012446614508707837714052853304868420427879959665251&
&4009368964527494988719996088230065668196236298805733689960371306226158464997243490564472254071897564&
&1441285398399860960455632647712855850663041779957201017448443871583297673755604162078008788300720724&
&1390865785566723954636935777578134428819598917631335685641784543423281488674422674670706697975557712&
&1788798468777700116472954103621810567107869855646414713502627836321256957407217461738363552424248762&
&4364780853518109957492932381740813319050481446127009055414257022203025376114948242287653245779337785&
&1981877869734028258091278067497905893806255685600107605770598216668682475603756961576049761981948205&
&2758118532729333127733603742149847001463931981340719681330844408263017545241644293372483217234561694&
&2639378557592944486629790954192274518015884259778696940266014279196551684158959230431151917518727133&
&4609575263460825447598815416225495259785319903964588374219923638761039583094807436598839770784963225&
&2080920941206268114832425403540515474312327876180802357701527842702008781378306569508588571830140611&
&0980426830095308627974030153554643774062498539644810004022317716657008936075218040845236685686491032&
&5886266629337247244143556352059546170104239050079561583450594483732665254246744436486149918427509748&
&5253621979537504128523848241127715641240965261646703516395599407360083455079665191393229410544185167&
&9990997876554244625589008743884056491694537267393122602348155432978423086460721901479480729284567258&
&3503954612118213364077776992584180757905173583882311275962271406750966991364528828189455892561297242&
&5252452248453502562347348900936766966136332741088135837550717443838484760651019872222926016920811114&
&6169371432077434885046020127763642567468723152059526010722289706864609324352227544963417635351891055&
&48847634608972381760403137363968e4932_16
logical, parameter :: test_ahuge2 = ahuge2 == zahuge2 .and. ahuge2 == dahuge2
logical, parameter :: test_ahuge3 = ahuge3 == zahuge3 .and. ahuge3 == dahuge3
logical, parameter :: test_ahuge4 = ahuge4 == zahuge4 .and. ahuge4 == dahuge4
@ -237,7 +188,7 @@ module m
real(4), parameter :: tiny4 = tiny(0._4), ztiny4 = real(z'00800000', kind=4)
real(8), parameter :: tiny8 = tiny(0._8), ztiny8 = real(z'0010000000000000', kind=8)
real(10), parameter :: tiny10 = tiny(0._10), ztiny10 = real(z'00018000000000000000', kind=10)
real(16), parameter :: tiny16 = tiny(0._16), ztiny16 = real(z'00008000000000000000000000000000', kind=16)
real(16), parameter :: tiny16 = tiny(0._16), ztiny16 = real(z'00010000000000000000000000000000', kind=16)
logical, parameter :: test_tiny2 = tiny2 == ztiny2
logical, parameter :: test_tiny3 = tiny3 == ztiny3
logical, parameter :: test_tiny4 = tiny4 == ztiny4
@ -257,7 +208,7 @@ module m
logical, parameter :: test_max4 = max4 == 127
logical, parameter :: test_max8 = max8 == 1023
logical, parameter :: test_max10 = max10 == 16383
logical, parameter :: test_max16 = max16 == 32767
logical, parameter :: test_max16 = max16 == 16383
integer, parameter :: &
min2 = minexponent(0._2), &
@ -271,7 +222,7 @@ module m
logical, parameter :: test_min4 = min4 == -126
logical, parameter :: test_min8 = min8 == -1022
logical, parameter :: test_min10 = min10 == -16382
logical, parameter :: test_min16 = min16 == -32766
logical, parameter :: test_min16 = min16 == -16382
integer, parameter :: &
irange1 = range(0_1), &
@ -297,6 +248,6 @@ module m
logical, parameter :: test_zrange4 = arange4 == 37 .and. zrange4 == 37
logical, parameter :: test_zrange8 = arange8 == 307 .and. zrange8 == 307
logical, parameter :: test_zrange10 = arange10 == 4931 .and. zrange10 == 4931
logical, parameter :: test_zrange16 = arange16 == 9863 .and. zrange16 == 9863
logical, parameter :: test_zrange16 = arange16 == 4931 .and. zrange16 == 4931
end module

View File

@ -36,18 +36,18 @@ module m1
! REAL(KIND=4) handles 5 <= R < 38 (if no KIND=3)
! REAL(KIND=8) handles 38 <= R < 308
! REAL(KIND=10) handles 308 <= R < 4932 (if available; ifort is KIND=16)
! REAL(KIND=16) handles 4932 <= R < 9864 (except Power double/double)
! REAL(KIND=16) handles 308 <= R < 4932 (except Power double/double)
integer, parameter :: realranges(*) = &
[range(0._2), range(0._3), range(0._4), range(0._8), range(0._10), &
range(0._16)]
logical, parameter :: rrangecheck = &
all([4, 37, 37, 307, 4931, 9863] == realranges)
all([4, 37, 37, 307, 4931, 4931] == realranges)
integer, parameter :: realrvals(*) = &
[0, 4, 5, 37, 38, 307, 308, 4931, 4932, 9863, 9864]
[0, 4, 5, 37, 38, 307, 308, 4931, 4932]
integer, parameter :: realrkinds(*) = &
[(selected_real_kind(0,realrvals(j)),j=1,size(realrvals))]
logical, parameter :: realrcheck = &
all([2, 2, 3, 3, 8, 8, 10, 10, 16, 16, -2] == realrkinds)
all([2, 2, 3, 3, 8, 8, 10, 10, -2] == realrkinds)
logical, parameter :: radixcheck = &
all([radix(0._2), radix(0._3), radix(0._4), radix(0._8), &
radix(0._10), radix(0._16)] == 2)
@ -59,7 +59,7 @@ module m1
[digits(0._2), digits(0._3), digits(0._4), digits(0._8), digits(0._10), &
digits(0._16)]
logical, parameter :: realdigitscheck = &
all([11, 8, 24, 53, 64, 112] == realdigits)
all([11, 8, 24, 53, 64, 113] == realdigits)
end module m1
!Expect: m1.mod
!module m1
@ -74,14 +74,14 @@ end module m1
!integer(4),parameter::realpvals(1_8:*)=[INTEGER(4)::0_4,3_4,4_4,6_4,7_4,15_4,16_4,18_4,19_4,33_4,34_4]
!integer(4),parameter::realpkinds(1_8:*)=[INTEGER(4)::2_4,2_4,4_4,4_4,8_4,8_4,10_4,10_4,16_4,16_4,-1_4]
!logical(4),parameter::realpcheck=.true._4
!integer(4),parameter::realranges(1_8:*)=[INTEGER(4)::4_4,37_4,37_4,307_4,4931_4,9863_4]
!integer(4),parameter::realranges(1_8:*)=[INTEGER(4)::4_4,37_4,37_4,307_4,4931_4,4931_4]
!logical(4),parameter::rrangecheck=.true._4
!integer(4),parameter::realrvals(1_8:*)=[INTEGER(4)::0_4,4_4,5_4,37_4,38_4,307_4,308_4,4931_4,4932_4,9863_4,9864_4]
!integer(4),parameter::realrkinds(1_8:*)=[INTEGER(4)::2_4,2_4,3_4,3_4,8_4,8_4,10_4,10_4,16_4,16_4,-2_4]
!integer(4),parameter::realrvals(1_8:*)=[INTEGER(4)::0_4,4_4,5_4,37_4,38_4,307_4,308_4,4931_4,4932_4]
!integer(4),parameter::realrkinds(1_8:*)=[INTEGER(4)::2_4,2_4,3_4,3_4,8_4,8_4,10_4,10_4,-2_4]
!logical(4),parameter::realrcheck=.true._4
!logical(4),parameter::radixcheck=.true._4
!integer(4),parameter::intdigits(1_8:*)=[INTEGER(4)::7_4,15_4,31_4,63_4,127_4]
!logical(4),parameter::intdigitscheck=.true._4
!integer(4),parameter::realdigits(1_8:*)=[INTEGER(4)::11_4,8_4,24_4,53_4,64_4,112_4]
!integer(4),parameter::realdigits(1_8:*)=[INTEGER(4)::11_4,8_4,24_4,53_4,64_4,113_4]
!logical(4),parameter::realdigitscheck=.true._4
!end