daScript icon indicating copy to clipboard operation
daScript copied to clipboard

Bad floating point comparisons

Open mingodad opened this issue 2 years ago • 9 comments

Using an adapted test from https://github.com/ArashPartow/exprtk we get only a few floating point operations right:

var total_count = 0;
var total_eq = 0;
def equal(a, b) {
	++total_count;
	if(a == b) {
		++total_eq;
	}
}

[export]
def main() {

//var abs = Math.abs;
//var pow = Math.pow;


let x=11.12345678910737373;
let y=22.12345678910737373;
let z=33.12345678910737373;
let w=44.12345678910737373;

//print(abs(x));
//print(2/abs(x));
//print((3/(2/abs(x))));

equal((1.003727171046591100000000000000),((((x+y)/z))));
equal((1101.252705279183400000000000000000),((((x+y)*z))));
equal((.123456789107372340000000000000),((((x+y)-z))));
equal((66.370370367322124000000000000000),((((x+y)+z))));
equal((-.332090942984469560000000000000),((((x-y)/z))));
equal((-364.358024680181020000000000000000),((((x-y)*z))));
equal((279.212772408427380000000000000000),((((x*y)+z))));
equal((212.965858830212650000000000000000),((((x*y)-z))));
equal((7.429457534765704800000000000000),((((x*y)/z))));
equal((8151.328812177552200000000000000000),((((x*y)*z))));
equal((33.626246967655966000000000000000),((((x/y)+z))));
equal((-32.620666610558779000000000000000),((((x/y)-z))));
equal((.015179278592502914000000000000),((((x/y)/z))));
equal((16.654148753141897000000000000000),((((x/y)*z))));
equal((.201340782111919360000000000000),(((x/(y+z)))));
equal((-1.011223344464306800000000000000),(((x/(y-z)))));
equal((.015179278592502914000000000000),(((x/(y*z)))));
equal((16.654148753141897000000000000000),(((x/(y/z)))));
equal((614.536655918821220000000000000000),(((x*(y+z)))));
equal((-122.358024680181120000000000000000),(((x*(y-z)))));
equal((8151.328812177553100000000000000000),(((x*(y*z)))));
equal((7.429457534765705700000000000000),(((x*(y/z)))));
equal((-44.123456789107372000000000000000),(((x-(y+z)))));
equal((22.123456789107372000000000000000),(((x-(y-z)))));
equal((10.455547732091844000000000000000),(((x-(y/z)))));
equal((-721.681908190574750000000000000000),(((x-(y*z)))));
equal((743.928821768789590000000000000000),(((x+(y*z)))));
equal((11.791365846122904000000000000000),(((x+(y/z)))));
equal((66.370370367322124000000000000000),(((x+(y+z)))));
equal((.123456789107374120000000000000),(((x+(y-z)))));
equal((12.375555278178009000000000000000),(((x+((y+z)/w)))));
equal((2448.808260789015100000000000000000),(((x+((y+z)*w)))));
equal((10.874156285464252000000000000000),(((x+((y-z)/w)))));
equal((-474.234567891073710000000000000000),(((x+((y-z)*w)))));
equal((27.731524658363433000000000000000),(((x+((y*z)/w)))));
equal((32345.029313296171000000000000000000),(((x+((y*z)*w)))));
equal((55.914822635230273000000000000000),(((x+((y/z)+w)))));
equal((11.138594067680263000000000000000),(((x+((y/z)/w)))));
equal((40.593913205385583000000000000000),(((x+((y/z)*w)))));
equal((9.871358300036739300000000000000),(((x-((y+z)/w)))));
equal((-2426.561347210800200000000000000000),(((x-((y+z)*w)))));
equal((11.372757292750496000000000000000),(((x-((y-z)/w)))));
equal((496.481481469288440000000000000000),(((x-((y-z)*w)))));
equal((-5.484611080148683400000000000000),(((x-((y*z)/w)))));
equal((-32322.782399717955000000000000000000),(((x-((y*z)*w)))));
equal((11.108319510534486000000000000000),(((x-((y/z)/w)))));
equal((-18.346999627170831000000000000000),(((x-((y/z)*w)))));
equal((1057.129248490076000000000000000000),(((((x+y)*z)-w))));
equal((-408.481481469288380000000000000000),(((((x-y)*z)-w))));
equal((8107.205355388445200000000000000000),(((((x*y)*z)-w))));
equal((-27.469308035965476000000000000000),(((((x/y)*z)-w))));
equal((-43.119729618060781000000000000000),(((((x+y)/z)-w))));
equal((-44.455547732091844000000000000000),(((((x-y)/z)-w))));
equal((-36.693999254341669000000000000000),(((((x*y)/z)-w))));
equal((-44.108277510514867000000000000000),(((((x/y)/z)-w))));
equal((1707.610729959364600000000000000000),((((x*y)+(z*w)))));
equal((-1215.432098720724300000000000000000),((((x*y)-(z*w)))));
equal((246.840015115676890000000000000000),((((x*y)+(z/w)))));
equal((245.338616122963150000000000000000),((((x*y)-(z/w)))));
equal((1.253489674905470700000000000000),((((x/y)+(z/w)))));
equal((-.247909317808285070000000000000),((((x/y)-(z/w)))));
equal((-1461.018624161495800000000000000000),((((x/y)-(z*w)))));
equal((.007497384991222116700000000000),(((x/(y+(z*w))))));
equal((-.007727853670178450700000000000),(((x/(y-(z*w))))));
equal((16503.259614385901000000000000000000),(((x*(y+(z*w))))));
equal((-16011.080983147258000000000000000000),(((x*(y-(z*w))))));
equal((-1428.274500761829600000000000000000),((((x+y)-(z*w)))));
equal((32.496214081857865000000000000000),((((x+y)-(z/w)))));
equal((1494.768327918259300000000000000000),((((x+y)+(z*w)))));
equal((33.997613074571625000000000000000),((((x+y)+(z/w)))));
equal((1450.521414340044400000000000000000),((((x-y)+(z*w)))));
equal((-10.249300503643120000000000000000),((((x-y)+(z/w)))));
equal((-1472.521414340044400000000000000000),((((x-y)-(z*w)))));
equal((-11.750699496356876000000000000000),((((x-y)-(z/w)))));
equal((44.246913578214745000000000000000),((((x+y)-(z-w)))));
equal((22.246913578214745000000000000000),((((x+y)+(z-w)))));
equal((-365.716049360362210000000000000000),((((x+y)*(z-w)))));
equal((-3.022446688928613200000000000000),((((x+y)/(z-w)))));
equal((-88.246913578214745000000000000000),((((x-y)-(z+w)))));
equal((66.246913578214745000000000000000),((((x-y)+(z+w)))));
equal((-849.716049360362040000000000000000),((((x-y)*(z+w)))));
equal((-.142400511430947700000000000000),((((x-y)/(z+w)))));
equal((168.842402041105290000000000000000),((((x*y)-(z+w)))));
equal((-76.744123399666151000000000000000),((((x/y)-(z+w)))));
equal((323.336229197534750000000000000000),((((x*y)+(z+w)))));
equal((77.749703756763338000000000000000),((((x/y)+(z+w)))));
equal((235.089315619320020000000000000000),((((x*y)+(z-w)))));
equal((-10.497209821451406000000000000000),((((x/y)+(z-w)))));
equal((257.089315619320020000000000000000),((((x*y)-(z-w)))));
equal((11.502790178548594000000000000000),((((x/y)-(z-w)))));
equal((48591.076155273644000000000000000000),((((x+y)*(z*w)))));
equal((24.958441278586456000000000000000),((((x+y)*(z/w)))));
equal((.022748153569291021000000000000),((((x+y)/(z*w)))));
equal((44.287912459727245000000000000000),((((x+y)/(z/w)))));
equal((-.007526403576486144500000000000),((((x-y)/(z*w)))));
equal((-14.653000372829164000000000000000),((((x-y)/(z/w)))));
equal((-16076.735557740487000000000000000000),((((x-y)*(z*w)))));
equal((-8.257694459925655700000000000000),((((x-y)*(z/w)))));
equal((19009.640096167626000000000000000000),((((x*y)*(z+w)))));
equal((38.838989470318317000000000000000),((((x/y)*(z+w)))));
equal((3.185749491080280400000000000000),((((x*y)/(z+w)))));
equal((.006508870778888831800000000000),((((x/y)/(z+w)))));
equal((-22.371755965392730000000000000000),((((x*y)/(z-w)))));
equal((-.045708198049872077000000000000),((((x/y)/(z-w)))));
equal((-2706.982471812520100000000000000000),((((x*y)*(z-w)))));
equal((-5.530691964034521600000000000000),((((x/y)*(z-w)))));
equal((27.731524658363433000000000000000),(((x+(y*(z/w))))));
equal((-5.484611080148683400000000000000),(((x-(y*(z/w))))));
equal((11.138594067680263000000000000000),(((x+(y/(z*w))))));
equal((11.108319510534486000000000000000),(((x-(y/(z*w))))));
equal((213.969586001259240000000000000000),((((x+y)/z)+((x*y)-z))));
equal((1093.823247744417600000000000000000),((((x+y)*z)-((x*y)/z))));
equal((1006.336882109852000000000000000000),((((x+y)-z)*((x*y)*z))));
equal((1.973766814689778000000000000000),((((x+y)+z)/((x/y)+z))));
equal((-32.952757553543250000000000000000),((((x-y)/z)+((x/y)-z))));
equal((-364.373203958773500000000000000000),((((x-y)*z)-((x/y)/z))));
equal((4650.051045467103000000000000000000),((((x*y)+z)*((x/y)*z))));
equal((1057.738311117870100000000000000000),((((x*y)-z)/(x/(y+z)))));
equal((6.418234190301397700000000000000),((((x*y)/z)+(x/(y-z)))));
equal((8151.313632898959400000000000000000),((((x*y)*z)-(x/(y*z)))));
equal((560.016519009229110000000000000000),((((x/y)+z)*(x/(y/z)))));
equal((-.053081726364696928000000000000),((((x/y)-z)/(x*(y+z)))));
equal((-122.342845401588620000000000000000),((((x/y)/z)+(x*(y-z)))));
equal((-8134.674663424410900000000000000000),((((x/y)*z)-(x*(y*z)))));
equal((1.495852790717019600000000000000),(((x/(y+z))*(x*(y/z)))));
equal((.022918044460966725000000000000),(((x/(y-z))/(x-(y+z)))));
equal((22.138636067699874000000000000000),(((x/(y*z))+(x-(y-z)))));
equal((6.198601021050052400000000000000),(((x/(y/z))-(x-(y/z)))));
equal((-443499.986496549570000000000000000000),(((x*(y+z))*(x-(y*z)))));
equal((-.164475445902551090000000000000),(((x*(y-z))/(x+(y*z)))));
equal((8163.120178023676100000000000000000),(((x*(y*z))+(x+(y/z)))));
equal((-58.940912832556421000000000000000),(((x*(y/z))-(x+(y+z)))));
equal((-5.447340299501163900000000000000),(((x-(y+z))*(x+(y-z)))));
equal((22.041305075002739000000000000000),(((x-(y-z))/((x+y)/z))));
equal((1111.708253011275200000000000000000),(((x-(y/z))+((x+y)*z))));
equal((-721.805364979682170000000000000000),(((x-(y*z))-((x+y)-z))));
equal((49374.831427720135000000000000000000),(((x+(y*z))*((x+y)+z))));
equal((-35.506436098964414000000000000000),(((x+(y/z))/((x-y)/z))));
equal((-297.987654312858920000000000000000),(((x+(y+z))+((x-y)*z))));
equal((-279.089315619320020000000000000000),(((x+(y-z))-((x*y)+z))));
equal((220.387820191560650000000000000000),(((((x+y)/z)+((x*y)-z))+(((x*y)/z)+(x/(y-z))))));
equal((-7057.490385154542300000000000000000),(((((x+y)*z)-((x*y)/z))-(((x*y)*z)-(x/(y*z))))));
equal((563565.277669760280000000000000000000),(((((x+y)-z)*((x*y)*z))*(((x/y)+z)*(x/(y/z))))));
equal((-37.183546012219971000000000000000),(((((x+y)+z)/((x/y)+z))/(((x/y)-z)/(x*(y+z))))));
equal((-155.295602955131870000000000000000),(((((x-y)/z)+((x/y)-z))+(((x/y)/z)+(x*(y-z))))));
equal((7770.301459465637900000000000000000),(((((x-y)*z)-((x/y)/z))-(((x/y)*z)-(x*(y*z))))));
equal((6955.791833338560500000000000000000),(((((x*y)+z)*((x/y)*z))*((x/(y+z))*(x*(y/z))))));
equal((46153.078763739024000000000000000000),(((((x*y)-z)/(x/(y+z)))/((x/(y-z))/(x-(y+z))))));
equal((28.556870258001272000000000000000),(((((x*y)/z)+(x/(y-z)))+((x/(y*z))+(x-(y-z))))));
equal((8145.115031877909100000000000000000),(((((x*y)*z)-(x/(y*z)))-((x/(y/z))-(x-(y/z))))));
equal((-248367318.61843780000000000000000000000),(((((x/y)+z)*(x/(y/z)))*((x*(y+z))*(x-(y*z))))));
equal((.322733439471244550000000000000),(((((x/y)-z)/(x*(y+z)))/((x*(y-z))/(x+(y*z))))));
equal((8040.777332622087700000000000000000),(((((x/y)/z)+(x*(y-z)))+((x*(y*z))+(x+(y/z))))));
equal((-8075.733750591854900000000000000000),(((((x/y)*z)-(x*(y*z)))-((x*(y/z))-(x+(y+z))))));
equal((-8.148419188994100900000000000000),((((x/(y+z))*(x*(y/z)))*((x-(y+z))*(x+(y-z))))));
equal((.001039777108614058700000000000),((((x/(y-z))/(x-(y+z)))/((x-(y-z))/((x+y)/z)))));
equal((1133.846889078975200000000000000000),((((x/(y*z))+(x-(y-z)))+((x-(y/z))+((x+y)*z)))));
equal((728.003966000732250000000000000000),((((x/(y/z))-(x-(y/z)))-((x-(y*z))-((x+y)-z)))));
equal((-21897737071.463291000000000000000000000),((((x*(y+z))*(x-(y*z)))*((x+(y*z))*((x+y)+z)))));
equal((.004632271328052217600000000000),((((x*(y-z))/(x+(y*z)))/((x+(y/z))/((x-y)/z)))));
equal((7865.132523710817600000000000000000),((((x*(y*z))+(x+(y/z)))+((x+(y+z))+((x-y)*z)))));
equal((220.148402786763600000000000000000),((((x*(y/z))-(x+(y+z)))-((x+(y-z))-((x*y)+z)))));
equal((-1165.565148692239500000000000000000),((((x-(y+z))*(x+(y-z)))*(((x+y)/z)+((x*y)-z)))));
equal((.020150700874619648000000000000),((((x-(y-z))/((x+y)/z))/(((x+y)*z)-((x*y)/z)))));
equal((2118.045135121127300000000000000000),((((x-(y/z))+((x+y)*z))+(((x+y)-z)*((x*y)*z)))));
equal((-723.779131794371890000000000000000),((((x-(y*z))-((x+y)-z))-(((x+y)+z)/((x/y)+z)))));
equal((-1627036.849284729500000000000000000000),((((x+(y*z))*((x+y)+z))*(((x-y)/z)+((x/y)-z)))));
equal((.097445244911537846000000000000),((((x+(y/z))/((x-y)/z))/(((x-y)*z)-((x/y)/z)))));
equal((4352.063391154244500000000000000000),((((x+(y+z))+((x-y)*z))+(((x*y)+z)*((x/y)*z)))));
equal((-1336.827626737190300000000000000000),((((x+(y-z))-((x*y)+z))-(((x*y)-z)/(x/(y+z))))));
equal((8365.502852069470500000000000000000),((((((x+y)/z)+((x*y)-z))+(((x*y)/z)+(x/(y-z))))+((((x*y)*z)-(x/(y*z)))-((x/(y/z))-(x-(y/z)))))));
equal((248360261.128052650000000000000000000000),((((((x+y)*z)-((x*y)/z))-(((x*y)*z)-(x/(y*z))))-((((x/y)+z)*(x/(y/z)))*((x*(y+z))*(x-(y*z)))))));
equal((181881.360428928720000000000000000000),((((((x+y)-z)*((x*y)*z))*(((x/y)+z)*(x/(y/z))))*((((x/y)-z)/(x*(y+z)))/((x*(y-z))/(x+(y*z)))))));
equal((-.004624372056836258600000000000),((((((x+y)+z)/((x/y)+z))/(((x/y)-z)/(x*(y+z))))/((((x/y)/z)+(x*(y-z)))+((x*(y*z))+(x+(y/z)))))));
equal((-8231.029353546986400000000000000000),((((((x-y)/z)+((x/y)-z))+(((x/y)/z)+(x*(y-z))))+((((x/y)*z)-(x*(y*z)))-((x*(y/z))-(x+(y+z)))))));
equal((7778.449878654631900000000000000000),((((((x-y)*z)-((x/y)/z))-(((x/y)*z)-(x*(y*z))))-(((x/(y+z))*(x*(y/z)))*((x-(y+z))*(x+(y-z)))))));
equal((7.232473120590050500000000000000),((((((x*y)+z)*((x/y)*z))*((x/(y+z))*(x*(y/z))))*(((x/(y-z))/(x-(y+z)))/((x-(y-z))/((x+y)/z))))));
equal((40.704859896232733000000000000000),((((((x*y)-z)/(x/(y+z)))/((x/(y-z))/(x-(y+z))))/(((x/(y*z))+(x-(y-z)))+((x-(y/z))+((x+y)*z))))));
equal((756.560836258733500000000000000000),((((((x*y)/z)+(x/(y-z)))+((x/(y*z))+(x-(y-z))))+(((x/(y/z))-(x-(y/z)))-((x-(y*z))-((x+y)-z))))));
equal((21897745216.5783230000000000000000000000),((((((x*y)*z)-(x/(y*z)))-((x/(y/z))-(x-(y/z))))-(((x*(y+z))*(x-(y*z)))*((x+(y*z))*((x+y)+z))))));
equal((-1150504.808861399100000000000000000000),((((((x/y)+z)*(x/(y/z)))*((x*(y+z))*(x-(y*z))))*(((x*(y-z))/(x+(y*z)))/((x+(y/z))/((x-y)/z))))));
equal((.000041033439487295113000000000),((((((x/y)-z)/(x*(y+z)))/((x*(y-z))/(x+(y*z))))/(((x*(y*z))+(x+(y/z)))+((x+(y+z))+((x-y)*z))))));
equal((8260.925735408851300000000000000000),((((((x/y)/z)+(x*(y-z)))+((x*(y*z))+(x+(y/z))))+(((x*(y/z))-(x+(y+z)))-((x+(y-z))-((x*y)+z))))));
equal((-6910.168601899615200000000000000000),((((((x/y)*z)-(x*(y*z)))-((x*(y/z))-(x+(y+z))))-(((x-(y+z))*(x+(y-z)))*(((x+y)/z)+((x*y)-z))))));
equal((-.164196357678430970000000000000),(((((x/(y+z))*(x*(y/z)))*((x-(y+z))*(x+(y-z))))*(((x-(y-z))/((x+y)/z))/(((x+y)*z)-((x*y)/z))))));
equal((.000000490913574679132420000000),(((((x/(y-z))/(x-(y+z)))/((x-(y-z))/((x+y)/z)))/(((x-(y/z))+((x+y)*z))+(((x+y)-z)*((x*y)*z))))));
equal((410.067757284603320000000000000000),(((((x/(y*z))+(x-(y-z)))+((x-(y/z))+((x+y)*z)))+(((x-(y*z))-((x+y)-z))-(((x+y)+z)/((x/y)+z))))));
equal((1627764.853250730100000000000000000000),(((((x/(y/z))-(x-(y/z)))-((x-(y*z))-((x+y)-z)))-(((x+(y*z))*((x+y)+z))*(((x-y)/z)+((x/y)-z))))));
equal((-2133830351.9372020000000000000000000000),(((((x*(y+z))*(x-(y*z)))*((x+(y*z))*((x+y)+z)))*(((x+(y/z))/((x-y)/z))/(((x-y)*z)-((x/y)/z))))));
equal((.000001064385077080335700000000),(((((x*(y-z))/(x+(y*z)))/((x+(y/z))/((x-y)/z)))/(((x+(y+z))+((x-y)*z))+(((x*y)+z)*((x/y)*z))))));
equal((6528.304896973627400000000000000000),(((((x*(y*z))+(x+(y/z)))+((x+(y+z))+((x-y)*z)))+(((x+(y-z))-((x*y)+z))-(((x*y)-z)/(x/(y+z)))))));
equal((-.239417404797052310000000000000),(((((x*(y/z))-(x+(y+z)))-((x+(y-z))-((x*y)+z)))-((((x+y)/z)+((x*y)-z))+(((x*y)/z)+(x/(y-z)))))));
equal((8225964.830166705000000000000000000000),(((((x-(y+z))*(x+(y-z)))*(((x+y)/z)+((x*y)-z)))*((((x+y)*z)-((x*y)/z))-(((x*y)*z)-(x/(y*z)))))));
equal((.000000035755753012213821000000),(((((x-(y-z))/((x+y)/z))/(((x+y)*z)-((x*y)/z)))/((((x+y)-z)*((x*y)*z))*(((x/y)+z)*(x/(y/z)))))));
equal((2080.861589108907100000000000000000),(((((x-(y/z))+((x+y)*z))+(((x+y)-z)*((x*y)*z)))+((((x+y)+z)/((x/y)+z))/(((x/y)-z)/(x*(y+z)))))));
equal((-568.483528839240080000000000000000),(((((x-(y*z))-((x+y)-z))-(((x+y)+z)/((x/y)+z)))-((((x-y)/z)+((x/y)-z))+(((x/y)/z)+(x*(y-z)))))));
equal((-12642566804.601507000000000000000000000),(((((x+(y*z))*((x+y)+z))*(((x-y)/z)+((x/y)-z)))*((((x-y)*z)-((x/y)/z))-(((x/y)*z)-(x*(y*z)))))));
equal((.000014009223859243528000000000),(((((x+(y/z))/((x-y)/z))/(((x-y)*z)-((x/y)/z)))/((((x*y)+z)*((x/y)*z))*((x/(y+z))*(x*(y/z)))))));
equal((50505.142154893270000000000000000000),(((((x+(y+z))+((x-y)*z))+(((x*y)+z)*((x/y)*z)))+((((x*y)-z)/(x/(y+z)))/((x/(y-z))/(x-(y+z)))))));
equal((-1365.384496995191500000000000000000),(((((x+(y-z))-((x*y)+z))-(((x*y)-z)/(x/(y+z))))-((((x*y)/z)+(x/(y-z)))+((x/(y*z))+(x-(y-z)))))));
equal((8119.580910666622900000000000000000),(((x+((y+z)/w))+(((x*y)*z)-w))));
equal((2476.277568824980800000000000000000),(((x+((y+z)*w))-(((x/y)*z)-w))));
equal((-468.890678853754710000000000000000),(((x+((y-z)/w))*(((x+y)/z)-w))));
equal((10.667612752158947000000000000000),(((x+((y-z)*w))/(((x-y)/z)-w))));
equal((-8.962474595978235900000000000000),(((x+((y*z)/w))+(((x*y)/z)-w))));
equal((32389.137590806684000000000000000000),(((x+((y*z)*w))-(((x/y)/z)-w))));
equal((95480.751095693966000000000000000000),(((x+((y/z)+w))*((x*y)+(z*w)))));
equal((-.009164307968667224600000000000),(((x+((y/z)/w))/((x*y)-(z*w)))));
equal((287.433928321062470000000000000000),(((x+((y/z)*w))+((x*y)+(z/w)))));
equal((-235.467257822926400000000000000000),(((x-((y+z)/w))-((x*y)-(z/w)))));
equal((-3041.669594253447000000000000000000),(((x-((y+z)*w))*((x/y)+(z/w)))));
equal((-45.874666564753142000000000000000),(((x-((y-z)/w))/((x/y)-(z/w)))));
equal((-964.537142692207450000000000000000),(((x-((y-z)*w))+((x/y)-(z*w)))));
equal((-5.492108465139905200000000000000),(((x-((y*z)/w))-(x/(y+(z*w))))));
equal((249.785732598039830000000000000000),(((x-((y*z)*w))*(x/(y-(z*w))))));
equal((.000673098513268939730000000000),(((x-((y/z)/w))/(x*(y+(z*w))))));
equal((-16029.427982774429000000000000000000),(((x-((y/z)*w))+(x*(y-(z*w))))));
equal((2485.403749251905500000000000000000),(((((x+y)*z)-w)-((x+y)-(z*w)))));
equal((-13274.101670300452000000000000000000),(((((x-y)*z)-w)*((x+y)-(z/w)))));
equal((5.423720321047492900000000000000),(((((x*y)*z)-w)/((x+y)+(z*w)))));
equal((6.528305038606149000000000000000),(((((x/y)*z)-w)+((x+y)+(z/w)))));
equal((-1493.641143958105200000000000000000),(((((x+y)/z)-w)-((x-y)+(z*w)))));
equal((455.638267760259680000000000000000),(((((x-y)/z)-w)*((x-y)+(z/w)))));
equal((.024919161716087646000000000000),(((((x*y)/z)-w)/((x-y)-(z*w)))));
equal((-55.858977006871740000000000000000),(((((x/y)/z)-w)+((x-y)-(z/w)))));

//equal("aaa" in "aaa123",1.0);
//equal("123" in "aaa123",1.0);

print("{total_count}, {total_eq}\n");
}

Output on https://gaijinentertainment.github.io/try-dascript/:

225, 84

Javascript version:

var total_count = 0;
var total_eq = 0;
function equal(a, b) {
	++total_count;
	if(a == b) {
		++total_eq;
	}
}

//[export]
function main() {

//var abs = Math.abs;
//var pow = Math.pow;


let x=11.12345678910737373;
let y=22.12345678910737373;
let z=33.12345678910737373;
let w=44.12345678910737373;

//print(abs(x));
//print(2/abs(x));
//print((3/(2/abs(x))));

equal((1.003727171046591100000000000000),((((x+y)/z))));
equal((1101.252705279183400000000000000000),((((x+y)*z))));
equal((.123456789107372340000000000000),((((x+y)-z))));
equal((66.370370367322124000000000000000),((((x+y)+z))));
equal((-.332090942984469560000000000000),((((x-y)/z))));
equal((-364.358024680181020000000000000000),((((x-y)*z))));
equal((279.212772408427380000000000000000),((((x*y)+z))));
equal((212.965858830212650000000000000000),((((x*y)-z))));
equal((7.429457534765704800000000000000),((((x*y)/z))));
equal((8151.328812177552200000000000000000),((((x*y)*z))));
equal((33.626246967655966000000000000000),((((x/y)+z))));
equal((-32.620666610558779000000000000000),((((x/y)-z))));
equal((.015179278592502914000000000000),((((x/y)/z))));
equal((16.654148753141897000000000000000),((((x/y)*z))));
equal((.201340782111919360000000000000),(((x/(y+z)))));
equal((-1.011223344464306800000000000000),(((x/(y-z)))));
equal((.015179278592502914000000000000),(((x/(y*z)))));
equal((16.654148753141897000000000000000),(((x/(y/z)))));
equal((614.536655918821220000000000000000),(((x*(y+z)))));
equal((-122.358024680181120000000000000000),(((x*(y-z)))));
equal((8151.328812177553100000000000000000),(((x*(y*z)))));
equal((7.429457534765705700000000000000),(((x*(y/z)))));
equal((-44.123456789107372000000000000000),(((x-(y+z)))));
equal((22.123456789107372000000000000000),(((x-(y-z)))));
equal((10.455547732091844000000000000000),(((x-(y/z)))));
equal((-721.681908190574750000000000000000),(((x-(y*z)))));
equal((743.928821768789590000000000000000),(((x+(y*z)))));
equal((11.791365846122904000000000000000),(((x+(y/z)))));
equal((66.370370367322124000000000000000),(((x+(y+z)))));
equal((.123456789107374120000000000000),(((x+(y-z)))));
equal((12.375555278178009000000000000000),(((x+((y+z)/w)))));
equal((2448.808260789015100000000000000000),(((x+((y+z)*w)))));
equal((10.874156285464252000000000000000),(((x+((y-z)/w)))));
equal((-474.234567891073710000000000000000),(((x+((y-z)*w)))));
equal((27.731524658363433000000000000000),(((x+((y*z)/w)))));
equal((32345.029313296171000000000000000000),(((x+((y*z)*w)))));
equal((55.914822635230273000000000000000),(((x+((y/z)+w)))));
equal((11.138594067680263000000000000000),(((x+((y/z)/w)))));
equal((40.593913205385583000000000000000),(((x+((y/z)*w)))));
equal((9.871358300036739300000000000000),(((x-((y+z)/w)))));
equal((-2426.561347210800200000000000000000),(((x-((y+z)*w)))));
equal((11.372757292750496000000000000000),(((x-((y-z)/w)))));
equal((496.481481469288440000000000000000),(((x-((y-z)*w)))));
equal((-5.484611080148683400000000000000),(((x-((y*z)/w)))));
equal((-32322.782399717955000000000000000000),(((x-((y*z)*w)))));
equal((11.108319510534486000000000000000),(((x-((y/z)/w)))));
equal((-18.346999627170831000000000000000),(((x-((y/z)*w)))));
equal((1057.129248490076000000000000000000),(((((x+y)*z)-w))));
equal((-408.481481469288380000000000000000),(((((x-y)*z)-w))));
equal((8107.205355388445200000000000000000),(((((x*y)*z)-w))));
equal((-27.469308035965476000000000000000),(((((x/y)*z)-w))));
equal((-43.119729618060781000000000000000),(((((x+y)/z)-w))));
equal((-44.455547732091844000000000000000),(((((x-y)/z)-w))));
equal((-36.693999254341669000000000000000),(((((x*y)/z)-w))));
equal((-44.108277510514867000000000000000),(((((x/y)/z)-w))));
equal((1707.610729959364600000000000000000),((((x*y)+(z*w)))));
equal((-1215.432098720724300000000000000000),((((x*y)-(z*w)))));
equal((246.840015115676890000000000000000),((((x*y)+(z/w)))));
equal((245.338616122963150000000000000000),((((x*y)-(z/w)))));
equal((1.253489674905470700000000000000),((((x/y)+(z/w)))));
equal((-.247909317808285070000000000000),((((x/y)-(z/w)))));
equal((-1461.018624161495800000000000000000),((((x/y)-(z*w)))));
equal((.007497384991222116700000000000),(((x/(y+(z*w))))));
equal((-.007727853670178450700000000000),(((x/(y-(z*w))))));
equal((16503.259614385901000000000000000000),(((x*(y+(z*w))))));
equal((-16011.080983147258000000000000000000),(((x*(y-(z*w))))));
equal((-1428.274500761829600000000000000000),((((x+y)-(z*w)))));
equal((32.496214081857865000000000000000),((((x+y)-(z/w)))));
equal((1494.768327918259300000000000000000),((((x+y)+(z*w)))));
equal((33.997613074571625000000000000000),((((x+y)+(z/w)))));
equal((1450.521414340044400000000000000000),((((x-y)+(z*w)))));
equal((-10.249300503643120000000000000000),((((x-y)+(z/w)))));
equal((-1472.521414340044400000000000000000),((((x-y)-(z*w)))));
equal((-11.750699496356876000000000000000),((((x-y)-(z/w)))));
equal((44.246913578214745000000000000000),((((x+y)-(z-w)))));
equal((22.246913578214745000000000000000),((((x+y)+(z-w)))));
equal((-365.716049360362210000000000000000),((((x+y)*(z-w)))));
equal((-3.022446688928613200000000000000),((((x+y)/(z-w)))));
equal((-88.246913578214745000000000000000),((((x-y)-(z+w)))));
equal((66.246913578214745000000000000000),((((x-y)+(z+w)))));
equal((-849.716049360362040000000000000000),((((x-y)*(z+w)))));
equal((-.142400511430947700000000000000),((((x-y)/(z+w)))));
equal((168.842402041105290000000000000000),((((x*y)-(z+w)))));
equal((-76.744123399666151000000000000000),((((x/y)-(z+w)))));
equal((323.336229197534750000000000000000),((((x*y)+(z+w)))));
equal((77.749703756763338000000000000000),((((x/y)+(z+w)))));
equal((235.089315619320020000000000000000),((((x*y)+(z-w)))));
equal((-10.497209821451406000000000000000),((((x/y)+(z-w)))));
equal((257.089315619320020000000000000000),((((x*y)-(z-w)))));
equal((11.502790178548594000000000000000),((((x/y)-(z-w)))));
equal((48591.076155273644000000000000000000),((((x+y)*(z*w)))));
equal((24.958441278586456000000000000000),((((x+y)*(z/w)))));
equal((.022748153569291021000000000000),((((x+y)/(z*w)))));
equal((44.287912459727245000000000000000),((((x+y)/(z/w)))));
equal((-.007526403576486144500000000000),((((x-y)/(z*w)))));
equal((-14.653000372829164000000000000000),((((x-y)/(z/w)))));
equal((-16076.735557740487000000000000000000),((((x-y)*(z*w)))));
equal((-8.257694459925655700000000000000),((((x-y)*(z/w)))));
equal((19009.640096167626000000000000000000),((((x*y)*(z+w)))));
equal((38.838989470318317000000000000000),((((x/y)*(z+w)))));
equal((3.185749491080280400000000000000),((((x*y)/(z+w)))));
equal((.006508870778888831800000000000),((((x/y)/(z+w)))));
equal((-22.371755965392730000000000000000),((((x*y)/(z-w)))));
equal((-.045708198049872077000000000000),((((x/y)/(z-w)))));
equal((-2706.982471812520100000000000000000),((((x*y)*(z-w)))));
equal((-5.530691964034521600000000000000),((((x/y)*(z-w)))));
equal((27.731524658363433000000000000000),(((x+(y*(z/w))))));
equal((-5.484611080148683400000000000000),(((x-(y*(z/w))))));
equal((11.138594067680263000000000000000),(((x+(y/(z*w))))));
equal((11.108319510534486000000000000000),(((x-(y/(z*w))))));
equal((213.969586001259240000000000000000),((((x+y)/z)+((x*y)-z))));
equal((1093.823247744417600000000000000000),((((x+y)*z)-((x*y)/z))));
equal((1006.336882109852000000000000000000),((((x+y)-z)*((x*y)*z))));
equal((1.973766814689778000000000000000),((((x+y)+z)/((x/y)+z))));
equal((-32.952757553543250000000000000000),((((x-y)/z)+((x/y)-z))));
equal((-364.373203958773500000000000000000),((((x-y)*z)-((x/y)/z))));
equal((4650.051045467103000000000000000000),((((x*y)+z)*((x/y)*z))));
equal((1057.738311117870100000000000000000),((((x*y)-z)/(x/(y+z)))));
equal((6.418234190301397700000000000000),((((x*y)/z)+(x/(y-z)))));
equal((8151.313632898959400000000000000000),((((x*y)*z)-(x/(y*z)))));
equal((560.016519009229110000000000000000),((((x/y)+z)*(x/(y/z)))));
equal((-.053081726364696928000000000000),((((x/y)-z)/(x*(y+z)))));
equal((-122.342845401588620000000000000000),((((x/y)/z)+(x*(y-z)))));
equal((-8134.674663424410900000000000000000),((((x/y)*z)-(x*(y*z)))));
equal((1.495852790717019600000000000000),(((x/(y+z))*(x*(y/z)))));
equal((.022918044460966725000000000000),(((x/(y-z))/(x-(y+z)))));
equal((22.138636067699874000000000000000),(((x/(y*z))+(x-(y-z)))));
equal((6.198601021050052400000000000000),(((x/(y/z))-(x-(y/z)))));
equal((-443499.986496549570000000000000000000),(((x*(y+z))*(x-(y*z)))));
equal((-.164475445902551090000000000000),(((x*(y-z))/(x+(y*z)))));
equal((8163.120178023676100000000000000000),(((x*(y*z))+(x+(y/z)))));
equal((-58.940912832556421000000000000000),(((x*(y/z))-(x+(y+z)))));
equal((-5.447340299501163900000000000000),(((x-(y+z))*(x+(y-z)))));
equal((22.041305075002739000000000000000),(((x-(y-z))/((x+y)/z))));
equal((1111.708253011275200000000000000000),(((x-(y/z))+((x+y)*z))));
equal((-721.805364979682170000000000000000),(((x-(y*z))-((x+y)-z))));
equal((49374.831427720135000000000000000000),(((x+(y*z))*((x+y)+z))));
equal((-35.506436098964414000000000000000),(((x+(y/z))/((x-y)/z))));
equal((-297.987654312858920000000000000000),(((x+(y+z))+((x-y)*z))));
equal((-279.089315619320020000000000000000),(((x+(y-z))-((x*y)+z))));
equal((220.387820191560650000000000000000),(((((x+y)/z)+((x*y)-z))+(((x*y)/z)+(x/(y-z))))));
equal((-7057.490385154542300000000000000000),(((((x+y)*z)-((x*y)/z))-(((x*y)*z)-(x/(y*z))))));
equal((563565.277669760280000000000000000000),(((((x+y)-z)*((x*y)*z))*(((x/y)+z)*(x/(y/z))))));
equal((-37.183546012219971000000000000000),(((((x+y)+z)/((x/y)+z))/(((x/y)-z)/(x*(y+z))))));
equal((-155.295602955131870000000000000000),(((((x-y)/z)+((x/y)-z))+(((x/y)/z)+(x*(y-z))))));
equal((7770.301459465637900000000000000000),(((((x-y)*z)-((x/y)/z))-(((x/y)*z)-(x*(y*z))))));
equal((6955.791833338560500000000000000000),(((((x*y)+z)*((x/y)*z))*((x/(y+z))*(x*(y/z))))));
equal((46153.078763739024000000000000000000),(((((x*y)-z)/(x/(y+z)))/((x/(y-z))/(x-(y+z))))));
equal((28.556870258001272000000000000000),(((((x*y)/z)+(x/(y-z)))+((x/(y*z))+(x-(y-z))))));
equal((8145.115031877909100000000000000000),(((((x*y)*z)-(x/(y*z)))-((x/(y/z))-(x-(y/z))))));
equal((-248367318.61843780000000000000000000000),(((((x/y)+z)*(x/(y/z)))*((x*(y+z))*(x-(y*z))))));
equal((.322733439471244550000000000000),(((((x/y)-z)/(x*(y+z)))/((x*(y-z))/(x+(y*z))))));
equal((8040.777332622087700000000000000000),(((((x/y)/z)+(x*(y-z)))+((x*(y*z))+(x+(y/z))))));
equal((-8075.733750591854900000000000000000),(((((x/y)*z)-(x*(y*z)))-((x*(y/z))-(x+(y+z))))));
equal((-8.148419188994100900000000000000),((((x/(y+z))*(x*(y/z)))*((x-(y+z))*(x+(y-z))))));
equal((.001039777108614058700000000000),((((x/(y-z))/(x-(y+z)))/((x-(y-z))/((x+y)/z)))));
equal((1133.846889078975200000000000000000),((((x/(y*z))+(x-(y-z)))+((x-(y/z))+((x+y)*z)))));
equal((728.003966000732250000000000000000),((((x/(y/z))-(x-(y/z)))-((x-(y*z))-((x+y)-z)))));
equal((-21897737071.463291000000000000000000000),((((x*(y+z))*(x-(y*z)))*((x+(y*z))*((x+y)+z)))));
equal((.004632271328052217600000000000),((((x*(y-z))/(x+(y*z)))/((x+(y/z))/((x-y)/z)))));
equal((7865.132523710817600000000000000000),((((x*(y*z))+(x+(y/z)))+((x+(y+z))+((x-y)*z)))));
equal((220.148402786763600000000000000000),((((x*(y/z))-(x+(y+z)))-((x+(y-z))-((x*y)+z)))));
equal((-1165.565148692239500000000000000000),((((x-(y+z))*(x+(y-z)))*(((x+y)/z)+((x*y)-z)))));
equal((.020150700874619648000000000000),((((x-(y-z))/((x+y)/z))/(((x+y)*z)-((x*y)/z)))));
equal((2118.045135121127300000000000000000),((((x-(y/z))+((x+y)*z))+(((x+y)-z)*((x*y)*z)))));
equal((-723.779131794371890000000000000000),((((x-(y*z))-((x+y)-z))-(((x+y)+z)/((x/y)+z)))));
equal((-1627036.849284729500000000000000000000),((((x+(y*z))*((x+y)+z))*(((x-y)/z)+((x/y)-z)))));
equal((.097445244911537846000000000000),((((x+(y/z))/((x-y)/z))/(((x-y)*z)-((x/y)/z)))));
equal((4352.063391154244500000000000000000),((((x+(y+z))+((x-y)*z))+(((x*y)+z)*((x/y)*z)))));
equal((-1336.827626737190300000000000000000),((((x+(y-z))-((x*y)+z))-(((x*y)-z)/(x/(y+z))))));
equal((8365.502852069470500000000000000000),((((((x+y)/z)+((x*y)-z))+(((x*y)/z)+(x/(y-z))))+((((x*y)*z)-(x/(y*z)))-((x/(y/z))-(x-(y/z)))))));
equal((248360261.128052650000000000000000000000),((((((x+y)*z)-((x*y)/z))-(((x*y)*z)-(x/(y*z))))-((((x/y)+z)*(x/(y/z)))*((x*(y+z))*(x-(y*z)))))));
equal((181881.360428928720000000000000000000),((((((x+y)-z)*((x*y)*z))*(((x/y)+z)*(x/(y/z))))*((((x/y)-z)/(x*(y+z)))/((x*(y-z))/(x+(y*z)))))));
equal((-.004624372056836258600000000000),((((((x+y)+z)/((x/y)+z))/(((x/y)-z)/(x*(y+z))))/((((x/y)/z)+(x*(y-z)))+((x*(y*z))+(x+(y/z)))))));
equal((-8231.029353546986400000000000000000),((((((x-y)/z)+((x/y)-z))+(((x/y)/z)+(x*(y-z))))+((((x/y)*z)-(x*(y*z)))-((x*(y/z))-(x+(y+z)))))));
equal((7778.449878654631900000000000000000),((((((x-y)*z)-((x/y)/z))-(((x/y)*z)-(x*(y*z))))-(((x/(y+z))*(x*(y/z)))*((x-(y+z))*(x+(y-z)))))));
equal((7.232473120590050500000000000000),((((((x*y)+z)*((x/y)*z))*((x/(y+z))*(x*(y/z))))*(((x/(y-z))/(x-(y+z)))/((x-(y-z))/((x+y)/z))))));
equal((40.704859896232733000000000000000),((((((x*y)-z)/(x/(y+z)))/((x/(y-z))/(x-(y+z))))/(((x/(y*z))+(x-(y-z)))+((x-(y/z))+((x+y)*z))))));
equal((756.560836258733500000000000000000),((((((x*y)/z)+(x/(y-z)))+((x/(y*z))+(x-(y-z))))+(((x/(y/z))-(x-(y/z)))-((x-(y*z))-((x+y)-z))))));
equal((21897745216.5783230000000000000000000000),((((((x*y)*z)-(x/(y*z)))-((x/(y/z))-(x-(y/z))))-(((x*(y+z))*(x-(y*z)))*((x+(y*z))*((x+y)+z))))));
equal((-1150504.808861399100000000000000000000),((((((x/y)+z)*(x/(y/z)))*((x*(y+z))*(x-(y*z))))*(((x*(y-z))/(x+(y*z)))/((x+(y/z))/((x-y)/z))))));
equal((.000041033439487295113000000000),((((((x/y)-z)/(x*(y+z)))/((x*(y-z))/(x+(y*z))))/(((x*(y*z))+(x+(y/z)))+((x+(y+z))+((x-y)*z))))));
equal((8260.925735408851300000000000000000),((((((x/y)/z)+(x*(y-z)))+((x*(y*z))+(x+(y/z))))+(((x*(y/z))-(x+(y+z)))-((x+(y-z))-((x*y)+z))))));
equal((-6910.168601899615200000000000000000),((((((x/y)*z)-(x*(y*z)))-((x*(y/z))-(x+(y+z))))-(((x-(y+z))*(x+(y-z)))*(((x+y)/z)+((x*y)-z))))));
equal((-.164196357678430970000000000000),(((((x/(y+z))*(x*(y/z)))*((x-(y+z))*(x+(y-z))))*(((x-(y-z))/((x+y)/z))/(((x+y)*z)-((x*y)/z))))));
equal((.000000490913574679132420000000),(((((x/(y-z))/(x-(y+z)))/((x-(y-z))/((x+y)/z)))/(((x-(y/z))+((x+y)*z))+(((x+y)-z)*((x*y)*z))))));
equal((410.067757284603320000000000000000),(((((x/(y*z))+(x-(y-z)))+((x-(y/z))+((x+y)*z)))+(((x-(y*z))-((x+y)-z))-(((x+y)+z)/((x/y)+z))))));
equal((1627764.853250730100000000000000000000),(((((x/(y/z))-(x-(y/z)))-((x-(y*z))-((x+y)-z)))-(((x+(y*z))*((x+y)+z))*(((x-y)/z)+((x/y)-z))))));
equal((-2133830351.9372020000000000000000000000),(((((x*(y+z))*(x-(y*z)))*((x+(y*z))*((x+y)+z)))*(((x+(y/z))/((x-y)/z))/(((x-y)*z)-((x/y)/z))))));
equal((.000001064385077080335700000000),(((((x*(y-z))/(x+(y*z)))/((x+(y/z))/((x-y)/z)))/(((x+(y+z))+((x-y)*z))+(((x*y)+z)*((x/y)*z))))));
equal((6528.304896973627400000000000000000),(((((x*(y*z))+(x+(y/z)))+((x+(y+z))+((x-y)*z)))+(((x+(y-z))-((x*y)+z))-(((x*y)-z)/(x/(y+z)))))));
equal((-.239417404797052310000000000000),(((((x*(y/z))-(x+(y+z)))-((x+(y-z))-((x*y)+z)))-((((x+y)/z)+((x*y)-z))+(((x*y)/z)+(x/(y-z)))))));
equal((8225964.830166705000000000000000000000),(((((x-(y+z))*(x+(y-z)))*(((x+y)/z)+((x*y)-z)))*((((x+y)*z)-((x*y)/z))-(((x*y)*z)-(x/(y*z)))))));
equal((.000000035755753012213821000000),(((((x-(y-z))/((x+y)/z))/(((x+y)*z)-((x*y)/z)))/((((x+y)-z)*((x*y)*z))*(((x/y)+z)*(x/(y/z)))))));
equal((2080.861589108907100000000000000000),(((((x-(y/z))+((x+y)*z))+(((x+y)-z)*((x*y)*z)))+((((x+y)+z)/((x/y)+z))/(((x/y)-z)/(x*(y+z)))))));
equal((-568.483528839240080000000000000000),(((((x-(y*z))-((x+y)-z))-(((x+y)+z)/((x/y)+z)))-((((x-y)/z)+((x/y)-z))+(((x/y)/z)+(x*(y-z)))))));
equal((-12642566804.601507000000000000000000000),(((((x+(y*z))*((x+y)+z))*(((x-y)/z)+((x/y)-z)))*((((x-y)*z)-((x/y)/z))-(((x/y)*z)-(x*(y*z)))))));
equal((.000014009223859243528000000000),(((((x+(y/z))/((x-y)/z))/(((x-y)*z)-((x/y)/z)))/((((x*y)+z)*((x/y)*z))*((x/(y+z))*(x*(y/z)))))));
equal((50505.142154893270000000000000000000),(((((x+(y+z))+((x-y)*z))+(((x*y)+z)*((x/y)*z)))+((((x*y)-z)/(x/(y+z)))/((x/(y-z))/(x-(y+z)))))));
equal((-1365.384496995191500000000000000000),(((((x+(y-z))-((x*y)+z))-(((x*y)-z)/(x/(y+z))))-((((x*y)/z)+(x/(y-z)))+((x/(y*z))+(x-(y-z)))))));
equal((8119.580910666622900000000000000000),(((x+((y+z)/w))+(((x*y)*z)-w))));
equal((2476.277568824980800000000000000000),(((x+((y+z)*w))-(((x/y)*z)-w))));
equal((-468.890678853754710000000000000000),(((x+((y-z)/w))*(((x+y)/z)-w))));
equal((10.667612752158947000000000000000),(((x+((y-z)*w))/(((x-y)/z)-w))));
equal((-8.962474595978235900000000000000),(((x+((y*z)/w))+(((x*y)/z)-w))));
equal((32389.137590806684000000000000000000),(((x+((y*z)*w))-(((x/y)/z)-w))));
equal((95480.751095693966000000000000000000),(((x+((y/z)+w))*((x*y)+(z*w)))));
equal((-.009164307968667224600000000000),(((x+((y/z)/w))/((x*y)-(z*w)))));
equal((287.433928321062470000000000000000),(((x+((y/z)*w))+((x*y)+(z/w)))));
equal((-235.467257822926400000000000000000),(((x-((y+z)/w))-((x*y)-(z/w)))));
equal((-3041.669594253447000000000000000000),(((x-((y+z)*w))*((x/y)+(z/w)))));
equal((-45.874666564753142000000000000000),(((x-((y-z)/w))/((x/y)-(z/w)))));
equal((-964.537142692207450000000000000000),(((x-((y-z)*w))+((x/y)-(z*w)))));
equal((-5.492108465139905200000000000000),(((x-((y*z)/w))-(x/(y+(z*w))))));
equal((249.785732598039830000000000000000),(((x-((y*z)*w))*(x/(y-(z*w))))));
equal((.000673098513268939730000000000),(((x-((y/z)/w))/(x*(y+(z*w))))));
equal((-16029.427982774429000000000000000000),(((x-((y/z)*w))+(x*(y-(z*w))))));
equal((2485.403749251905500000000000000000),(((((x+y)*z)-w)-((x+y)-(z*w)))));
equal((-13274.101670300452000000000000000000),(((((x-y)*z)-w)*((x+y)-(z/w)))));
equal((5.423720321047492900000000000000),(((((x*y)*z)-w)/((x+y)+(z*w)))));
equal((6.528305038606149000000000000000),(((((x/y)*z)-w)+((x+y)+(z/w)))));
equal((-1493.641143958105200000000000000000),(((((x+y)/z)-w)-((x-y)+(z*w)))));
equal((455.638267760259680000000000000000),(((((x-y)/z)-w)*((x-y)+(z/w)))));
equal((.024919161716087646000000000000),(((((x*y)/z)-w)/((x-y)-(z*w)))));
equal((-55.858977006871740000000000000000),(((((x/y)/z)-w)+((x-y)-(z/w)))));

//equal("aaa" in "aaa123",1.0);
//equal("123" in "aaa123",1.0);

console.log(total_count, total_eq);
//print("{total_count}, {total_eq}\n");
}

main();

Output:

225 225

mingodad avatar Oct 27 '23 16:10 mingodad

C++, Clang 17.0.1, -O3 https://godbolt.org/z/jjo91bb1Y Output: 225, 84

imp5imp5 avatar Oct 27 '23 16:10 imp5imp5

See here https://github.com/c3lang/c3c/issues/975#issuecomment-1707928493 this problem happen with clang-14 onward.

mingodad avatar Oct 27 '23 17:10 mingodad

JS uses 64-bit floats (double), not 32-bit ones. If you replace "float" with "double" in the code, the output will be 225, 225: https://godbolt.org/z/91Y4bhadq

imp5imp5 avatar Oct 27 '23 17:10 imp5imp5

Are you meaning that daScript is parsing 44.12345678910737373, -964.537142692207450000000000000000, ... as 32bit floating points ?

mingodad avatar Oct 27 '23 17:10 mingodad

Yes, this is 32-bit floats https://dascript.org/doc/reference/language/datatypes.html?highlight=float

imp5imp5 avatar Oct 27 '23 17:10 imp5imp5

Yes, there is a double format as well with "lf" or "d" suffix for literals (or use explicit double type, i.e. var x:double)

AntonYudintsev avatar Nov 03 '23 09:11 AntonYudintsev

Thank for reply ! With the attached test updated to use double it get a very close result (probably OK) but the time/memory taken to execute it is not good.

/usr/bin/time /home/mingo/dev/c/A_programming-languages/daScript/bin/daScript exprtk_functional_test.txt-double.ds 
7300, 7279
8.20user 0.07system 0:08.27elapsed 99%CPU (0avgtext+0avgdata 187456maxresident)k
0inputs+0outputs (0major+38737minor)pagefaults 0swaps

mingo@mingo-X550VX:~/dev/c/A_programming-languages/exprtk$ /usr/bin/time lua exprtk_functional_test.txt.lua 
7437	7321
0.02user 0.00system 0:00.04elapsed 83%CPU (0avgtext+0avgdata 4392maxresident)k
1992inputs+0outputs (1major+570minor)pagefaults 0swaps

lua -v
Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio


exprtk_functional_test-double.zip

mingodad avatar Nov 03 '23 11:11 mingodad

it is probably not reasonable comparison, as it includes startup time, which can be much higher. Probably should add profile block (see other benchmarks)

AntonYudintsev avatar Jan 16 '24 14:01 AntonYudintsev

compiler folded all expressions during the compilation time. add "options log" to see results. making function with arguments of x, y, z, w will work around the issue.

borisbat avatar Jan 16 '24 16:01 borisbat