Skip to content

Adjust data type in qsimh tests to fix numerical comparison failures#1014

Open
mhucka wants to merge 3 commits intoquantumlib:mainfrom
mhucka:qsimh-tests-datatype
Open

Adjust data type in qsimh tests to fix numerical comparison failures#1014
mhucka wants to merge 3 commits intoquantumlib:mainfrom
mhucka:qsimh-tests-datatype

Conversation

@mhucka
Copy link
Collaborator

@mhucka mhucka commented Feb 4, 2026

When running tests on a Debian-based Linux system with g++ (Debian 15.2.0-3) 15.2.0, I get errors that appear to be due to numerical precision issues. It seems that some uses of float in tests/run_qsimh_tests.cc need to be double's in order to resolve them.

Output from `make run-cxx-tests` [----------] Global test environment set-up. [----------] 2 tests from RunQSimHTest [ RUN ] RunQSimHTest.QSimHRunner [ OK ] RunQSimHTest.QSimHRunner (0 ms) [ RUN ] RunQSimHTest.CirqGates run_qsimh_test.cc:229: Failure The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0062986763761138931, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.13179841637611389, std::real(expected_results[i]) evaluates to 0.12549974, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.035221514014434824, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.18351143598556519, std::imag(expected_results[i]) evaluates to 0.21873295000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.039959894224624634, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.13104191422462463, std::real(expected_results[i]) evaluates to -0.09108202, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.016947779936487196, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.059335622936487198, std::imag(expected_results[i]) evaluates to 0.042387843000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0020535411359024064, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.1089613288640976, std::real(expected_results[i]) evaluates to 0.11101487, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.040648414013576495, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.10513428598642349, std::imag(expected_results[i]) evaluates to -0.14578269999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0007721670914077744, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.078953877091407776, std::real(expected_results[i]) evaluates to 0.078181710000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.019585073881120685, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.048383396118879318, std::imag(expected_results[i]) evaluates to 0.067968470000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011808277813796994, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.110350102186203, std::real(expected_results[i]) evaluates to -0.12215838, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0096730519777417177, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.0046784980222582817, std::imag(expected_results[i]) evaluates to -0.014351549999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.069353073088378903, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.12083339691162109, std::real(expected_results[i]) evaluates to 0.19018647, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.043380597480964678, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.23392610251903534, std::imag(expected_results[i]) evaluates to -0.27730670000000002, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.040031763882503513, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.03641984611749649, std::real(expected_results[i]) evaluates to 0.076451610000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.060284535233764647, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.10916924476623535, std::imag(expected_results[i]) evaluates to 0.16945378, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.038641317763442984, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.17788019776344299, std::real(expected_results[i]) evaluates to -0.13923888000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0012541888537597745, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.23595666885375977, std::imag(expected_results[i]) evaluates to -0.23470247999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.032922524468345649, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.12519289553165436, std::real(expected_results[i]) evaluates to -0.15811542000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.023803132880516054, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.20950256288051605, std::imag(expected_results[i]) evaluates to 0.18569943, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0013214931310653599, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.12399865686893463, std::real(expected_results[i]) evaluates to 0.12532014999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.031921336637306202, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.21107946336269379, std::imag(expected_results[i]) evaluates to -0.24300079999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.017829032430412291, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.029023930430412292, std::real(expected_results[i]) evaluates to 0.011194898, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.049390020930862422, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.38205882906913757, std::imag(expected_results[i]) evaluates to -0.43144884999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.057924614963035581, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.23875011503696442, std::real(expected_results[i]) evaluates to -0.29667473, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.034402516216230396, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.017195183783769608, std::imag(expected_results[i]) evaluates to 0.051597700000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011055804096990109, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.0062863389030098915, std::real(expected_results[i]) evaluates to 0.017342143000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.048772305901031487, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.30701917409896851, std::imag(expected_results[i]) evaluates to 0.35579147999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.02939495521213531, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.18562756478786469, std::real(expected_results[i]) evaluates to 0.21502251999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071854889099082941, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.010201945900917053, std::imag(expected_results[i]) evaluates to 0.082056834999999995, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0015646991005611385, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.049259629100561142, std::real(expected_results[i]) evaluates to -0.047694930000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071878572646076208, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.067620165646076202, std::imag(expected_results[i]) evaluates to 0.0042584069999999996, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.012822937002029411, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.22708609700202942, std::real(expected_results[i]) evaluates to -0.21426316000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.061513482502587799, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.012811013497412205, std::imag(expected_results[i]) evaluates to -0.074324496000000004, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0062987508819198623, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.13179849088191986, std::real(expected_results[i]) evaluates to 0.12549974, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.035221558717918405, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.1835113912820816, std::imag(expected_results[i]) evaluates to 0.21873295000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.039959119364242554, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.13104113936424255, std::real(expected_results[i]) evaluates to -0.09108202, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.016947519166166304, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.059335362166166306, std::imag(expected_results[i]) evaluates to 0.042387843000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0020537870050621049, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.1089610829949379, std::real(expected_results[i]) evaluates to 0.11101487, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.04064924847860335, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.10513345152139664, std::imag(expected_results[i]) evaluates to -0.14578269999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.00077265882972717137, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.078954368829727173, std::real(expected_results[i]) evaluates to 0.078181710000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.019585386805505756, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.048383083194494247, std::imag(expected_results[i]) evaluates to 0.067968470000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011808218209152219, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.11035016179084778, std::real(expected_results[i]) evaluates to -0.12215838, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0096731106510639184, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.0046784393489360809, std::imag(expected_results[i]) evaluates to -0.014351549999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.069352864472122189, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.12083360552787781, std::real(expected_results[i]) evaluates to 0.19018647, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.043379882225227373, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.23392681777477264, std::imag(expected_results[i]) evaluates to -0.27730670000000002, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.04003150311218262, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.036420106887817383, std::real(expected_results[i]) evaluates to 0.076451610000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.060284907762794493, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.10916887223720551, std::imag(expected_results[i]) evaluates to 0.16945378, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.038640796222801199, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.17787967622280121, std::real(expected_results[i]) evaluates to -0.13923888000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0012538759293747037, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.23595635592937469, std::imag(expected_results[i]) evaluates to -0.23470247999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.032923224822921759, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.12519219517707825, std::real(expected_results[i]) evaluates to -0.15811542000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.023802447427101137, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.20950187742710114, std::imag(expected_results[i]) evaluates to 0.18569943, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0013214707793235692, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.12399867922067642, std::real(expected_results[i]) evaluates to 0.12532014999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.031922543631362904, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.21107825636863708, std::imag(expected_results[i]) evaluates to -0.24300079999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.017829078996541022, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.029023976996541023, std::real(expected_results[i]) evaluates to 0.011194898, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.049390378558731074, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.38205847144126892, std::imag(expected_results[i]) evaluates to -0.43144884999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.057924167928199766, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.23875056207180023, std::real(expected_results[i]) evaluates to -0.29667473, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.034402588859391216, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.017195111140608788, std::imag(expected_results[i]) evaluates to 0.051597700000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011055638321571828, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.0062865046784281731, std::real(expected_results[i]) evaluates to 0.017342143000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.048771680052261346, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.30701979994773865, std::imag(expected_results[i]) evaluates to 0.35579147999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.029394985014457697, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.1856275349855423, std::real(expected_results[i]) evaluates to 0.21502251999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071854763370535368, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.010202071629464626, std::imag(expected_results[i]) evaluates to 0.082056834999999995, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.001564751254625317, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.04925968125462532, std::real(expected_results[i]) evaluates to -0.047694930000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071878796163494116, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.06762038916349411, std::imag(expected_results[i]) evaluates to 0.0042584069999999996, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.012822340955581657, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.22708550095558167, std::real(expected_results[i]) evaluates to -0.21426316000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.061513255259879593, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.012811240740120411, std::imag(expected_results[i]) evaluates to -0.074324496000000004, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0062987359807586685, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.13179847598075867, std::real(expected_results[i]) evaluates to 0.12549974, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.035221543816757211, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.1835114061832428, std::imag(expected_results[i]) evaluates to 0.21873295000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.03995929817817688, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.13104131817817688, std::real(expected_results[i]) evaluates to -0.09108202, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.016947526616746901, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.059335369616746902, std::imag(expected_results[i]) evaluates to 0.042387843000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0020534964324188248, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.10896137356758118, std::real(expected_results[i]) evaluates to 0.11101487, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.04064895790596007, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.10513374209403992, std::imag(expected_results[i]) evaluates to -0.14578269999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.00077255452159881444, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.078954264521598816, std::real(expected_results[i]) evaluates to 0.078181710000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.01958532720086098, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.048383142799139023, std::imag(expected_results[i]) evaluates to 0.067968470000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011808352319602963, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.11035002768039703, std::real(expected_results[i]) evaluates to -0.12215838, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0096731064601123327, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.0046784435398876667, std::imag(expected_results[i]) evaluates to -0.014351549999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.06935300603315353, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.12083346396684647, std::real(expected_results[i]) evaluates to 0.19018647, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.043379643806648271, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.23392705619335175, std::imag(expected_results[i]) evaluates to -0.27730670000000002, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.04003159996973038, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.036420010030269623, std::real(expected_results[i]) evaluates to 0.076451610000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.060284714047698973, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.10916906595230103, std::imag(expected_results[i]) evaluates to 0.16945378, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.038640960135574332, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.17787984013557434, std::real(expected_results[i]) evaluates to -0.13923888000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0012543676676941007, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.23595684766769409, std::imag(expected_results[i]) evaluates to -0.23470247999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.032922986404342658, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.12519243359565735, std::real(expected_results[i]) evaluates to -0.15811542000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.023802521932907106, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.2095019519329071, std::imag(expected_results[i]) evaluates to 0.18569943, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.001321679395580283, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.12399847060441971, std::real(expected_results[i]) evaluates to 0.12532014999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.031922543631362904, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.21107825636863708, std::imag(expected_results[i]) evaluates to -0.24300079999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.017828892732026098, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.0290237907320261, std::real(expected_results[i]) evaluates to 0.011194898, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.049390050733184809, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.38205879926681519, std::imag(expected_results[i]) evaluates to -0.43144884999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.057924257335166929, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.23875047266483307, std::real(expected_results[i]) evaluates to -0.29667473, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.034402518078875545, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.017195181921124458, std::imag(expected_results[i]) evaluates to 0.051597700000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011055618298136474, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.0062865247018635273, std::real(expected_results[i]) evaluates to 0.017342143000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.048771858866195672, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.30701962113380432, std::imag(expected_results[i]) evaluates to 0.35579147999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.029395014816780085, which exceeds 2e-6, where std::real(results[i]) evaluates to 0.18562750518321991, std::real(expected_results[i]) evaluates to 0.21502251999999999, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071854823906502718, which exceeds 2e-6, where std::imag(results[i]) evaluates to 0.010202011093497276, std::imag(expected_results[i]) evaluates to 0.082056834999999995, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0015646991005611385, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.049259629100561142, std::real(expected_results[i]) evaluates to -0.047694930000000003, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071878803614074713, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.067620396614074707, std::imag(expected_results[i]) evaluates to 0.0042584069999999996, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.01282262407764434, which exceeds 2e-6, where std::real(results[i]) evaluates to -0.22708578407764435, std::real(expected_results[i]) evaluates to -0.21426316000000001, and 2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.061513230114170078, which exceeds 2e-6, where std::imag(results[i]) evaluates to -0.012811265885829926, std::imag(expected_results[i]) evaluates to -0.074324496000000004, and 2e-6 evaluates to 1.9999999999999999e-06.

[ FAILED ] RunQSimHTest.CirqGates (174 ms)
[----------] 2 tests from RunQSimHTest (175 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (175 ms total) [ PASSED ] 1 test.
[ FAILED ] 1 test, listed below:
[ FAILED ] RunQSimHTest.CirqGates

1 FAILED TEST
gmake[1]: *** [Makefile:81: run-cxx-tests] Error 1

When running this on a Debian-based Linux system, I get errors that
appear to be due to numerical precision issues. It seems that some uses
of `float` in tests/run_qsimh_tests.cc need to be `double`'s in order to
resolve them.

<details><summary>Output from `make run-cxx-tests`</summary>
[----------] Global test environment set-up.
[----------] 2 tests from RunQSimHTest
[ RUN      ] RunQSimHTest.QSimHRunner
[       OK ] RunQSimHTest.QSimHRunner (0 ms)
[ RUN      ] RunQSimHTest.CirqGates
run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0062986763761138931, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.13179841637611389,
std::real(expected_results[i]) evaluates to 0.12549974, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.035221514014434824, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.18351143598556519,
std::imag(expected_results[i]) evaluates to 0.21873295000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.039959894224624634, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.13104191422462463,
std::real(expected_results[i]) evaluates to -0.09108202, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.016947779936487196, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.059335622936487198,
std::imag(expected_results[i]) evaluates to 0.042387843000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0020535411359024064, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.1089613288640976,
std::real(expected_results[i]) evaluates to 0.11101487, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.040648414013576495, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.10513428598642349,
std::imag(expected_results[i]) evaluates to -0.14578269999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0007721670914077744, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.078953877091407776,
std::real(expected_results[i]) evaluates to 0.078181710000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.019585073881120685, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.048383396118879318,
std::imag(expected_results[i]) evaluates to 0.067968470000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011808277813796994, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.110350102186203,
std::real(expected_results[i]) evaluates to -0.12215838, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0096730519777417177, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.0046784980222582817,
std::imag(expected_results[i]) evaluates to -0.014351549999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.069353073088378903, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.12083339691162109,
std::real(expected_results[i]) evaluates to 0.19018647, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.043380597480964678, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.23392610251903534,
std::imag(expected_results[i]) evaluates to -0.27730670000000002, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.040031763882503513, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.03641984611749649,
std::real(expected_results[i]) evaluates to 0.076451610000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.060284535233764647, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.10916924476623535,
std::imag(expected_results[i]) evaluates to 0.16945378, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.038641317763442984, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.17788019776344299,
std::real(expected_results[i]) evaluates to -0.13923888000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0012541888537597745, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.23595666885375977,
std::imag(expected_results[i]) evaluates to -0.23470247999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.032922524468345649, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.12519289553165436,
std::real(expected_results[i]) evaluates to -0.15811542000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.023803132880516054, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.20950256288051605,
std::imag(expected_results[i]) evaluates to 0.18569943, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0013214931310653599, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.12399865686893463,
std::real(expected_results[i]) evaluates to 0.12532014999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.031921336637306202, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.21107946336269379,
std::imag(expected_results[i]) evaluates to -0.24300079999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.017829032430412291, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.029023930430412292,
std::real(expected_results[i]) evaluates to 0.011194898, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.049390020930862422, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.38205882906913757,
std::imag(expected_results[i]) evaluates to -0.43144884999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.057924614963035581, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.23875011503696442,
std::real(expected_results[i]) evaluates to -0.29667473, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.034402516216230396, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.017195183783769608,
std::imag(expected_results[i]) evaluates to 0.051597700000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011055804096990109, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.0062863389030098915,
std::real(expected_results[i]) evaluates to 0.017342143000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.048772305901031487, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.30701917409896851,
std::imag(expected_results[i]) evaluates to 0.35579147999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.02939495521213531, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.18562756478786469,
std::real(expected_results[i]) evaluates to 0.21502251999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071854889099082941, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.010201945900917053,
std::imag(expected_results[i]) evaluates to 0.082056834999999995, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0015646991005611385, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.049259629100561142,
std::real(expected_results[i]) evaluates to -0.047694930000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071878572646076208, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.067620165646076202,
std::imag(expected_results[i]) evaluates to 0.0042584069999999996, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:229: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.012822937002029411, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.22708609700202942,
std::real(expected_results[i]) evaluates to -0.21426316000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:230: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.061513482502587799, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.012811013497412205,
std::imag(expected_results[i]) evaluates to -0.074324496000000004, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0062987508819198623, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.13179849088191986,
std::real(expected_results[i]) evaluates to 0.12549974, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.035221558717918405, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.1835113912820816,
std::imag(expected_results[i]) evaluates to 0.21873295000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.039959119364242554, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.13104113936424255,
std::real(expected_results[i]) evaluates to -0.09108202, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.016947519166166304, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.059335362166166306,
std::imag(expected_results[i]) evaluates to 0.042387843000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0020537870050621049, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.1089610829949379,
std::real(expected_results[i]) evaluates to 0.11101487, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.04064924847860335, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.10513345152139664,
std::imag(expected_results[i]) evaluates to -0.14578269999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.00077265882972717137, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.078954368829727173,
std::real(expected_results[i]) evaluates to 0.078181710000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.019585386805505756, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.048383083194494247,
std::imag(expected_results[i]) evaluates to 0.067968470000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011808218209152219, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.11035016179084778,
std::real(expected_results[i]) evaluates to -0.12215838, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0096731106510639184, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.0046784393489360809,
std::imag(expected_results[i]) evaluates to -0.014351549999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.069352864472122189, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.12083360552787781,
std::real(expected_results[i]) evaluates to 0.19018647, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.043379882225227373, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.23392681777477264,
std::imag(expected_results[i]) evaluates to -0.27730670000000002, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.04003150311218262, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.036420106887817383,
std::real(expected_results[i]) evaluates to 0.076451610000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.060284907762794493, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.10916887223720551,
std::imag(expected_results[i]) evaluates to 0.16945378, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.038640796222801199, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.17787967622280121,
std::real(expected_results[i]) evaluates to -0.13923888000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0012538759293747037, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.23595635592937469,
std::imag(expected_results[i]) evaluates to -0.23470247999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.032923224822921759, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.12519219517707825,
std::real(expected_results[i]) evaluates to -0.15811542000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.023802447427101137, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.20950187742710114,
std::imag(expected_results[i]) evaluates to 0.18569943, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0013214707793235692, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.12399867922067642,
std::real(expected_results[i]) evaluates to 0.12532014999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.031922543631362904, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.21107825636863708,
std::imag(expected_results[i]) evaluates to -0.24300079999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.017829078996541022, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.029023976996541023,
std::real(expected_results[i]) evaluates to 0.011194898, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.049390378558731074, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.38205847144126892,
std::imag(expected_results[i]) evaluates to -0.43144884999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.057924167928199766, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.23875056207180023,
std::real(expected_results[i]) evaluates to -0.29667473, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.034402588859391216, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.017195111140608788,
std::imag(expected_results[i]) evaluates to 0.051597700000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011055638321571828, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.0062865046784281731,
std::real(expected_results[i]) evaluates to 0.017342143000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.048771680052261346, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.30701979994773865,
std::imag(expected_results[i]) evaluates to 0.35579147999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.029394985014457697, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.1856275349855423,
std::real(expected_results[i]) evaluates to 0.21502251999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071854763370535368, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.010202071629464626,
std::imag(expected_results[i]) evaluates to 0.082056834999999995, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.001564751254625317, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.04925968125462532,
std::real(expected_results[i]) evaluates to -0.047694930000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071878796163494116, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.06762038916349411,
std::imag(expected_results[i]) evaluates to 0.0042584069999999996, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:242: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.012822340955581657, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.22708550095558167,
std::real(expected_results[i]) evaluates to -0.21426316000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:243: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.061513255259879593, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.012811240740120411,
std::imag(expected_results[i]) evaluates to -0.074324496000000004, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0062987359807586685, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.13179847598075867,
std::real(expected_results[i]) evaluates to 0.12549974, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.035221543816757211, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.1835114061832428,
std::imag(expected_results[i]) evaluates to 0.21873295000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.03995929817817688, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.13104131817817688,
std::real(expected_results[i]) evaluates to -0.09108202, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.016947526616746901, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.059335369616746902,
std::imag(expected_results[i]) evaluates to 0.042387843000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0020534964324188248, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.10896137356758118,
std::real(expected_results[i]) evaluates to 0.11101487, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.04064895790596007, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.10513374209403992,
std::imag(expected_results[i]) evaluates to -0.14578269999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.00077255452159881444, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.078954264521598816,
std::real(expected_results[i]) evaluates to 0.078181710000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.01958532720086098, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.048383142799139023,
std::imag(expected_results[i]) evaluates to 0.067968470000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011808352319602963, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.11035002768039703,
std::real(expected_results[i]) evaluates to -0.12215838, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0096731064601123327, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.0046784435398876667,
std::imag(expected_results[i]) evaluates to -0.014351549999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.06935300603315353, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.12083346396684647,
std::real(expected_results[i]) evaluates to 0.19018647, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.043379643806648271, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.23392705619335175,
std::imag(expected_results[i]) evaluates to -0.27730670000000002, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.04003159996973038, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.036420010030269623,
std::real(expected_results[i]) evaluates to 0.076451610000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.060284714047698973, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.10916906595230103,
std::imag(expected_results[i]) evaluates to 0.16945378, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.038640960135574332, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.17787984013557434,
std::real(expected_results[i]) evaluates to -0.13923888000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.0012543676676941007, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.23595684766769409,
std::imag(expected_results[i]) evaluates to -0.23470247999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.032922986404342658, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.12519243359565735,
std::real(expected_results[i]) evaluates to -0.15811542000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.023802521932907106, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.2095019519329071,
std::imag(expected_results[i]) evaluates to 0.18569943, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.001321679395580283, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.12399847060441971,
std::real(expected_results[i]) evaluates to 0.12532014999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.031922543631362904, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.21107825636863708,
std::imag(expected_results[i]) evaluates to -0.24300079999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.017828892732026098, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.0290237907320261,
std::real(expected_results[i]) evaluates to 0.011194898, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.049390050733184809, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.38205879926681519,
std::imag(expected_results[i]) evaluates to -0.43144884999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.057924257335166929, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.23875047266483307,
std::real(expected_results[i]) evaluates to -0.29667473, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.034402518078875545, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.017195181921124458,
std::imag(expected_results[i]) evaluates to 0.051597700000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.011055618298136474, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.0062865247018635273,
std::real(expected_results[i]) evaluates to 0.017342143000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.048771858866195672, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.30701962113380432,
std::imag(expected_results[i]) evaluates to 0.35579147999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.029395014816780085, which exceeds 2e-6, where
std::real(results[i]) evaluates to 0.18562750518321991,
std::real(expected_results[i]) evaluates to 0.21502251999999999, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071854823906502718, which exceeds 2e-6, where
std::imag(results[i]) evaluates to 0.010202011093497276,
std::imag(expected_results[i]) evaluates to 0.082056834999999995, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.0015646991005611385, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.049259629100561142,
std::real(expected_results[i]) evaluates to -0.047694930000000003, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.071878803614074713, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.067620396614074707,
std::imag(expected_results[i]) evaluates to 0.0042584069999999996, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:255: Failure
The difference between std::real(results[i]) and std::real(expected_results[i]) is 0.01282262407764434, which exceeds 2e-6, where
std::real(results[i]) evaluates to -0.22708578407764435,
std::real(expected_results[i]) evaluates to -0.21426316000000001, and
2e-6 evaluates to 1.9999999999999999e-06.

run_qsimh_test.cc:256: Failure
The difference between std::imag(results[i]) and std::imag(expected_results[i]) is 0.061513230114170078, which exceeds 2e-6, where
std::imag(results[i]) evaluates to -0.012811265885829926,
std::imag(expected_results[i]) evaluates to -0.074324496000000004, and
2e-6 evaluates to 1.9999999999999999e-06.

[  FAILED  ] RunQSimHTest.CirqGates (174 ms)
[----------] 2 tests from RunQSimHTest (175 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (175 ms total)
[  PASSED  ] 1 test.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] RunQSimHTest.CirqGates

 1 FAILED TEST
gmake[1]: *** [Makefile:81: run-cxx-tests] Error 1
</details>
@github-actions github-actions bot added the size: S 10< lines changed <50 label Feb 4, 2026
@mhucka mhucka changed the title Adjust data type in qsimh tests Adjust data type in qsimh tests to fix numerical comparison failures Feb 4, 2026
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request addresses test failures caused by numerical precision issues by changing the floating-point type from float to double in tests/run_qsimh_test.cc. The change is correct in fixing the test failures. However, the current implementation forces the use of the non-vectorized SimulatorBasic, which can lead to a performance degradation in the tests. I've suggested an alternative approach that maintains the performance benefits of vectorized simulators (AVX/SSE) while still using double precision, in line with the project's style guide on performance and vectorization.

@mhucka mhucka requested a review from sergeisakov February 26, 2026 19:57
Copy link
Collaborator

@sergeisakov sergeisakov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not related to numerical precision issues. It's probably a g++ bug. For instance, the test passes if one omits either the -flto=auto flag or AVX related flags. The root cause of test failure is that the last Schmidt decomposition matrix for the XXPowGate gate (lines 715-730 in gates_cirq.h) is computed incorrectly.

@@ -28,6 +28,7 @@
#include "../lib/io.h"
#include "../lib/run_qsimh.h"
#include "../lib/simmux.h"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can delete this line.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size: S 10< lines changed <50

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants