Closed JIM-GLITCH closed 2 years ago
Thanks for the bug report. There's definitely a problem with rounding precise values (integers) in the power primitive that I need to fix, but it's a bit tricky since the underlying C libraries provide no guarantees this operation obeys the IEEE rounding mode setting. A fix is in work but may take a while to properly regression test it.
Note that float values don't exhibit the same problem:
?- {2.0==X*X},solve(X).
X:: -1.41421356237309... ;
X:: 1.41421356237309... .
?- between(1,100,Xi),X is float(Xi),{X == Y*Y},findall(Y, solve(Y),List),length(List,Len),writeln([X,Len,List]),fail.
[1.0,2,[_35520{real(-1.0000000000000007,-0.9999999999999997)},_35398{real(0.9999999999999997,1.0000000000000007)}]]
[2.0,2,[_35520{real(-1.4142135623730956,-1.4142135623730945)},_35398{real(1.4142135623730945,1.4142135623730956)}]]
[3.0,2,[_35520{real(-1.732050807568878,-1.7320508075688765)},_35398{real(1.7320508075688765,1.732050807568878)}]]
[4.0,2,[_35520{real(-2.0000000000000013,-1.9999999999999993)},_35398{real(1.9999999999999993,2.0000000000000013)}]]
[5.0,2,[_35520{real(-2.236067977499791,-2.2360679774997885)},_35398{real(2.2360679774997885,2.236067977499791)}]]
[6.0,2,[_35520{real(-2.449489742783179,-2.449489742783177)},_35398{real(2.449489742783177,2.449489742783179)}]]
[7.0,2,[_35520{real(-2.645751311064592,-2.6457513110645894)},_35398{real(2.6457513110645894,2.645751311064592)}]]
[8.0,2,[_35520{real(-2.828427124746191,-2.828427124746189)},_35398{real(2.828427124746189,2.828427124746191)}]]
[9.0,2,[_35520{real(-3.0000000000000013,-2.9999999999999987)},_35398{real(2.9999999999999987,3.0000000000000013)}]]
[10.0,2,[_35520{real(-3.162277660168381,-3.1622776601683777)},_35398{real(3.1622776601683777,3.162277660168381)}]]
[11.0,2,[_35520{real(-3.316624790355401,-3.3166247903553985)},_35398{real(3.3166247903553985,3.316624790355401)}]]
[12.0,2,[_35520{real(-3.464101615137756,-3.464101615137753)},_35398{real(3.464101615137753,3.464101615137756)}]]
[13.0,2,[_35520{real(-3.6055512754639905,-3.605551275463988)},_35398{real(3.605551275463988,3.6055512754639905)}]]
[14.0,2,[_35520{real(-3.7416573867739427,-3.74165738677394)},_35398{real(3.74165738677394,3.7416573867739427)}]]
[15.0,2,[_35520{real(-3.8729833462074184,-3.8729833462074157)},_35398{real(3.8729833462074157,3.8729833462074184)}]]
[16.0,2,[_35520{real(-4.000000000000003,-3.9999999999999987)},_35398{real(3.9999999999999987,4.000000000000003)}]]
[17.0,2,[_35520{real(-4.123105625617663,-4.123105625617658)},_35398{real(4.123105625617658,4.123105625617663)}]]
[18.0,2,[_35520{real(-4.242640687119287,-4.242640687119282)},_35398{real(4.242640687119282,4.242640687119287)}]]
[19.0,2,[_35520{real(-4.358898943540676,-4.358898943540671)},_35398{real(4.358898943540671,4.358898943540676)}]]
[20.0,2,[_35520{real(-4.472135954999582,-4.472135954999577)},_35398{real(4.472135954999577,4.472135954999582)}]]
[21.0,2,[_35520{real(-4.5825756949558425,-4.582575694955837)},_35398{real(4.582575694955837,4.5825756949558425)}]]
[22.0,2,[_35520{real(-4.690415759823432,-4.690415759823427)},_35398{real(4.690415759823427,4.690415759823432)}]]
[23.0,2,[_35520{real(-4.795831523312722,-4.795831523312717)},_35398{real(4.795831523312717,4.795831523312722)}]]
[24.0,2,[_35520{real(-4.898979485566358,-4.898979485566354)},_35398{real(4.898979485566354,4.898979485566358)}]]
[25.0,2,[_35520{real(-5.000000000000003,-4.999999999999997)},_35398{real(4.999999999999997,5.000000000000003)}]]
[26.0,2,[_35520{real(-5.099019513592787,-5.099019513592782)},_35398{real(5.099019513592782,5.099019513592787)}]]
[27.0,2,[_35520{real(-5.196152422706635,-5.196152422706629)},_35398{real(5.196152422706629,5.196152422706635)}]]
[28.0,2,[_35520{real(-5.291502622129184,-5.291502622129179)},_35398{real(5.291502622129179,5.291502622129184)}]]
[29.0,2,[_35520{real(-5.385164807134506,-5.385164807134501)},_35398{real(5.385164807134501,5.385164807134506)}]]
[30.0,2,[_35520{real(-5.477225575051664,-5.4772255750516585)},_35398{real(5.4772255750516585,5.477225575051664)}]]
[31.0,2,[_35520{real(-5.567764362830024,-5.56776436283002)},_35398{real(5.56776436283002,5.567764362830024)}]]
[32.0,2,[_35520{real(-5.656854249492382,-5.656854249492378)},_35398{real(5.656854249492378,5.656854249492382)}]]
[33.0,2,[_35520{real(-5.744562646538031,-5.744562646538026)},_35398{real(5.744562646538026,5.744562646538031)}]]
[34.0,2,[_35520{real(-5.830951894845303,-5.830951894845298)},_35398{real(5.830951894845298,5.830951894845303)}]]
[35.0,2,[_35520{real(-5.916079783099619,-5.9160797830996135)},_35398{real(5.9160797830996135,5.916079783099619)}]]
[36.0,2,[_35520{real(-6.000000000000003,-5.999999999999997)},_35398{real(5.999999999999997,6.000000000000003)}]]
[37.0,2,[_35520{real(-6.082762530298223,-6.082762530298217)},_35398{real(6.082762530298217,6.082762530298223)}]]
[38.0,2,[_35520{real(-6.16441400296898,-6.164414002968973)},_35398{real(6.164414002968973,6.16441400296898)}]]
[39.0,2,[_35520{real(-6.244997998398401,-6.244997998398396)},_35398{real(6.244997998398396,6.244997998398401)}]]
[40.0,2,[_35520{real(-6.324555320336762,-6.3245553203367555)},_35398{real(6.3245553203367555,6.324555320336762)}]]
[41.0,2,[_35520{real(-6.403124237432851,-6.403124237432846)},_35398{real(6.403124237432846,6.403124237432851)}]]
[42.0,2,[_35520{real(-6.480740698407863,-6.480740698407858)},_35398{real(6.480740698407858,6.480740698407863)}]]
[43.0,2,[_35520{real(-6.557438524302003,-6.557438524301998)},_35398{real(6.557438524301998,6.557438524302003)}]]
[44.0,2,[_35520{real(-6.633249580710802,-6.633249580710797)},_35398{real(6.633249580710797,6.633249580710802)}]]
[45.0,2,[_35520{real(-6.708203932499372,-6.708203932499367)},_35398{real(6.708203932499367,6.708203932499372)}]]
[46.0,2,[_35520{real(-6.782329983125271,-6.7823299831252655)},_35398{real(6.7823299831252655,6.782329983125271)}]]
[47.0,2,[_35520{real(-6.855654600401047,-6.855654600401041)},_35398{real(6.855654600401041,6.855654600401047)}]]
[48.0,2,[_35520{real(-6.928203230275512,-6.928203230275506)},_35398{real(6.928203230275506,6.928203230275512)}]]
[49.0,2,[_35520{real(-7.000000000000003,-6.999999999999997)},_35398{real(6.999999999999997,7.000000000000003)}]]
[50.0,2,[_35520{real(-7.071067811865478,-7.071067811865473)},_35398{real(7.071067811865473,7.071067811865478)}]]
[51.0,2,[_35520{real(-7.141428428542853,-7.141428428542847)},_35398{real(7.141428428542847,7.141428428542853)}]]
[52.0,2,[_35520{real(-7.211102550927981,-7.211102550927976)},_35398{real(7.211102550927976,7.211102550927981)}]]
[53.0,2,[_35520{real(-7.280109889280521,-7.280109889280515)},_35398{real(7.280109889280515,7.280109889280521)}]]
[54.0,2,[_35520{real(-7.348469228349537,-7.348469228349532)},_35398{real(7.348469228349532,7.348469228349537)}]]
[55.0,2,[_35520{real(-7.416198487095666,-7.41619848709566)},_35398{real(7.41619848709566,7.416198487095666)}]]
[56.0,2,[_35520{real(-7.483314773547885,-7.48331477354788)},_35398{real(7.48331477354788,7.483314773547885)}]]
[57.0,2,[_35520{real(-7.5498344352707525,-7.549834435270747)},_35398{real(7.549834435270747,7.5498344352707525)}]]
[58.0,2,[_35520{real(-7.615773105863911,-7.615773105863906)},_35398{real(7.615773105863906,7.615773105863911)}]]
[59.0,2,[_35520{real(-7.6811457478686105,-7.681145747868605)},_35398{real(7.681145747868605,7.6811457478686105)}]]
[60.0,2,[_35520{real(-7.745966692414837,-7.745966692414831)},_35398{real(7.745966692414831,7.745966692414837)}]]
[61.0,2,[_35520{real(-7.810249675906657,-7.810249675906651)},_35398{real(7.810249675906651,7.810249675906657)}]]
[62.0,2,[_35520{real(-7.874007874011814,-7.8740078740118085)},_35398{real(7.8740078740118085,7.874007874011814)}]]
[63.0,2,[_35520{real(-7.937253933193775,-7.9372539331937695)},_35398{real(7.9372539331937695,7.937253933193775)}]]
[64.0,2,[_35520{real(-8.000000000000005,-7.999999999999997)},_35398{real(7.999999999999997,8.000000000000005)}]]
[65.0,2,[_35520{real(-8.062257748298554,-8.062257748298544)},_35398{real(8.062257748298544,8.062257748298554)}]]
[66.0,2,[_35520{real(-8.124038404635966,-8.124038404635956)},_35398{real(8.124038404635956,8.124038404635966)}]]
[67.0,2,[_35520{real(-8.185352771872456,-8.185352771872445)},_35398{real(8.185352771872445,8.185352771872456)}]]
[68.0,2,[_35520{real(-8.246211251235327,-8.246211251235316)},_35398{real(8.246211251235316,8.246211251235327)}]]
[69.0,2,[_35520{real(-8.30662386291808,-8.30662386291807)},_35398{real(8.30662386291807,8.30662386291808)}]]
[70.0,2,[_35520{real(-8.366600265340761,-8.36660026534075)},_35398{real(8.36660026534075,8.366600265340761)}]]
[71.0,2,[_35520{real(-8.426149773176364,-8.426149773176354)},_35398{real(8.426149773176354,8.426149773176364)}]]
[72.0,2,[_35520{real(-8.485281374238575,-8.485281374238564)},_35398{real(8.485281374238564,8.485281374238575)}]]
[73.0,2,[_35520{real(-8.544003745317536,-8.544003745317525)},_35398{real(8.544003745317525,8.544003745317536)}]]
[74.0,2,[_35520{real(-8.602325267042632,-8.602325267042621)},_35398{real(8.602325267042621,8.602325267042632)}]]
[75.0,2,[_35520{real(-8.66025403784439,-8.660254037844382)},_35398{real(8.660254037844382,8.66025403784439)}]]
[76.0,2,[_35520{real(-8.717797887081352,-8.717797887081343)},_35398{real(8.717797887081343,8.717797887081352)}]]
[77.0,2,[_35520{real(-8.774964387392128,-8.774964387392117)},_35398{real(8.774964387392117,8.774964387392128)}]]
[78.0,2,[_35520{real(-8.831760866327851,-8.831760866327842)},_35398{real(8.831760866327842,8.831760866327851)}]]
[79.0,2,[_35520{real(-8.888194417315594,-8.888194417315583)},_35398{real(8.888194417315583,8.888194417315594)}]]
[80.0,2,[_35520{real(-8.944271909999165,-8.944271909999154)},_35398{real(8.944271909999154,8.944271909999165)}]]
[81.0,2,[_35520{real(-9.000000000000005,-8.999999999999995)},_35398{real(8.999999999999995,9.000000000000005)}]]
[82.0,2,[_35520{real(-9.055385138137423,-9.055385138137412)},_35398{real(9.055385138137412,9.055385138137423)}]]
[83.0,2,[_35520{real(-9.110433579144305,-9.110433579144294)},_35398{real(9.110433579144294,9.110433579144305)}]]
[84.0,2,[_35520{real(-9.165151389911685,-9.165151389911674)},_35398{real(9.165151389911674,9.165151389911685)}]]
[85.0,2,[_35520{real(-9.219544457292892,-9.219544457292882)},_35398{real(9.219544457292882,9.219544457292892)}]]
[86.0,2,[_35520{real(-9.27361849549571,-9.273618495495699)},_35398{real(9.273618495495699,9.27361849549571)}]]
[87.0,2,[_35520{real(-9.327379053088821,-9.32737905308881)},_35398{real(9.32737905308881,9.327379053088821)}]]
[88.0,2,[_35520{real(-9.380831519646865,-9.380831519646854)},_35398{real(9.380831519646854,9.380831519646865)}]]
[89.0,2,[_35520{real(-9.433981132056608,-9.433981132056598)},_35398{real(9.433981132056598,9.433981132056608)}]]
[90.0,2,[_35520{real(-9.486832980505143,-9.486832980505133)},_35398{real(9.486832980505133,9.486832980505143)}]]
[91.0,2,[_35520{real(-9.539392014169461,-9.53939201416945)},_35398{real(9.53939201416945,9.539392014169461)}]]
[92.0,2,[_35520{real(-9.591663046625444,-9.591663046625435)},_35398{real(9.591663046625435,9.591663046625444)}]]
[93.0,2,[_35520{real(-9.64365076099296,-9.64365076099295)},_35398{real(9.64365076099295,9.64365076099296)}]]
[94.0,2,[_35520{real(-9.695359714832664,-9.695359714832653)},_35398{real(9.695359714832653,9.695359714832664)}]]
[95.0,2,[_35520{real(-9.746794344808968,-9.74679434480896)},_35398{real(9.74679434480896,9.746794344808968)}]]
[96.0,2,[_35520{real(-9.797958971132717,-9.797958971132708)},_35398{real(9.797958971132708,9.797958971132717)}]]
[97.0,2,[_35520{real(-9.84885780179611,-9.8488578017961)},_35398{real(9.8488578017961,9.84885780179611)}]]
[98.0,2,[_35520{real(-9.89949493661167,-9.89949493661166)},_35398{real(9.89949493661166,9.89949493661167)}]]
[99.0,2,[_35520{real(-9.949874371066205,-9.949874371066194)},_35398{real(9.949874371066194,9.949874371066205)}]]
[100.0,2,[_35520{real(-10.000000000000005,-9.999999999999995)},_35398{real(9.999999999999995,10.000000000000005)}]]
false.
Thank you. I see.
Fixed in v0.9.8 alpha.
Awesome!
Hi, ridgeworks. I use windows 10. When I run examples, it didn't work as expected.
When I run
?- {2==X*X},solve(X).
,X
has only one result. I didn't have a choice to type;
. When I run?- {2==X*X}.
, it worked as expected. When I run?- {2==X*X, X < 0}.
, I got afalse
. When I runbetween(1,100,X),{X == Y*Y},findall(Y, solve(Y),List),length(List,Len),writeln([X,Len,List]),fail.
,In some cases it cannot find the negative result .