diff --git a/src/Simulation/TargetDefinitions/Decompositions/ExpFrac.qs b/src/Simulation/TargetDefinitions/Decompositions/ExpFrac.qs index e6f6c55a406..5a0bdeeb3f1 100644 --- a/src/Simulation/TargetDefinitions/Decompositions/ExpFrac.qs +++ b/src/Simulation/TargetDefinitions/Decompositions/ExpFrac.qs @@ -31,7 +31,9 @@ namespace Microsoft.Quantum.Intrinsic { /// Register to apply the given rotation to. @EnableTestingViaName("Test.TargetDefinitions.ExpFrac") operation ExpFrac (paulis : Pauli[], numerator : Int, power : Int, qubits : Qubit[]) : Unit is Adj + Ctl { - let angle = (PI() * IntAsDouble(numerator)) / IntAsDouble(2 ^ power); + // Note that power must be converted to a double and used with 2.0 instead of 2 to allow for + // negative exponents that result in a fractional denominator. + let angle = (PI() * IntAsDouble(numerator)) / (2.0 ^ IntAsDouble(power)); Exp(paulis, angle, qubits); } } \ No newline at end of file diff --git a/src/Simulation/TargetDefinitions/Decompositions/RFrac.qs b/src/Simulation/TargetDefinitions/Decompositions/RFrac.qs index e6c7e951643..2c1e1b7be37 100644 --- a/src/Simulation/TargetDefinitions/Decompositions/RFrac.qs +++ b/src/Simulation/TargetDefinitions/Decompositions/RFrac.qs @@ -41,6 +41,8 @@ namespace Microsoft.Quantum.Intrinsic { /// ``` @EnableTestingViaName("Test.TargetDefinitions.RFrac") operation RFrac (pauli : Pauli, numerator : Int, power : Int, qubit : Qubit) : Unit is Adj + Ctl { + // Note that power must be converted to a double and used with 2.0 instead of 2 to allow for + // negative exponents that result in a fractional denominator. let angle = ((-2.0 * PI()) * IntAsDouble(numerator)) / (2.0 ^ IntAsDouble(power)); R(pauli, angle, qubit); }