Skip to content

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

Merged
mhucka merged 6 commits intoquantumlib:mainfrom
mhucka:qsimh-tests-datatype
Apr 5, 2026
Merged

Adjust data type in qsimh tests to resolve numerical comparison failures#1014
mhucka merged 6 commits intoquantumlib:mainfrom
mhucka:qsimh-tests-datatype

Conversation

@mhucka
Copy link
Copy Markdown
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.

Per Sergei's comment, the root cause is probably a bug in the version of G++ used, and is affected by some compilation flags. So, the changes in this PR may simply be helping the compiler.

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
Copy Markdown
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
Copy Markdown
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.

@mhucka mhucka changed the title Adjust data type in qsimh tests to fix numerical comparison failures Adjust data type in qsimh tests to resolve numerical comparison failures Apr 5, 2026
@mhucka mhucka enabled auto-merge April 5, 2026 06:14
@mhucka mhucka added this pull request to the merge queue Apr 5, 2026
Merged via the queue into quantumlib:main with commit b7e6627 Apr 5, 2026
28 checks passed
@mhucka mhucka deleted the qsimh-tests-datatype branch April 5, 2026 06:28
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