microsoft / QuantumLibraries

Q# libraries for the Quantum Development Kit
https://docs.microsoft.com/quantum
MIT License
543 stars 179 forks source link

Questions about the DoubleAsFixedPoint function running out of memory #669

Open AidPaike opened 1 year ago

AidPaike commented 1 year ago

Describe the bug

There was something wrong when I tried to print the result of DoubleAsFixedPoint. After debugging, I found two errors in its source code.

  1. When integerBits or fractionalBits is negative, it undergoes no validation, and logically, it will execute successfully if the sum of integerBits and fractionalBitsis greater than 0. However, negative numbers are meaningless here. For example, the official documentation's description of integerBits states: "Assumed number of integer bits (including the sign bit)."
  2. Another error is running the following program will lead to an overflow. The content of the error is in this line the related linehttps://github.com/microsoft/QuantumLibraries/blob/025a8126023602cd3c57c2d0e07d1c682954c557/Numerics/src/FixedPoint/Convert.qs#L35, the value of rescaledConstant is too big to calculate.

To Reproduce

namespace Test {
    open Microsoft.Quantum.Logical;
    open Microsoft.Quantum.Diagnostics;
    open Microsoft.Quantum.Oracles;
    open Microsoft.Quantum.Convert;
    open Microsoft.Quantum.Arrays;
    open Microsoft.Quantum.Math;
    open Microsoft.Quantum.Arithmetic;
    open Microsoft.Quantum.Canon;
    open Microsoft.Quantum.Intrinsic;

    @EntryPoint()
    operation main() : Unit {
        mutable integerBits = 4;
        mutable fractionalBits = 64;
        mutable value = 9.1;
        mutable APIResult = DoubleAsFixedPoint(integerBits, fractionalBits, value);
        Message($"{APIResult}");
    }
}

Expected behavior

  1. Add fact statements to the FixedPointAsBoolArray function to prompt integerBits and fractionalBits should be positive.

  2. The overflow problem with the Floor is traced to the Truncate function.

Actual behavior

image-20230419125742169

System.OverflowException: “Arithmetic operation resulted in an overflow.”

System information

Additional context

We can submit a PR to fix this bug QuantumLibraries.