Použití knihovny numerických knihovenUsing the Numerics library

PřehledOverview

Knihovna numerických typů se skládá ze tří součástíThe Numerics library consists of three components

  1. Základní celočíselná aritmetická operace s přidanými celočíselnými a komparátorůBasic integer arithmetic with integer adders and comparators
  2. Celočíselná funkce vysoké úrovně , která je postavená na základních funkcích. zahrnuje násobení, dělení, inverze atd. pro podepsaná a nepodepsaná celá čísla.High-level integer functionality that is built on top of the basic functionality; it includes multiplication, division, inversion, etc. for signed and unsigned integers.
  3. Aritmetické funkce s pevnou desetinnou čárkou s inicializací s pevnou desetinnou čárkou, sčítání, násobení, recipročního, polynomických vyhodnocení a měření.Fixed-point arithmetic functionality with fixed-point initialization, addition, multiplication, reciprocal, polynomial evaluation, and measurement.

Všechny tyto součásti jsou k dispozici pomocí jednoho příkazu open:All of these components can be accessed using a single open statement:

open Microsoft.Quantum.Arithmetic;

DruhyTypes

Knihovna numerických hodnot podporuje následující typy.The numerics library supports the following types

  1. LittleEndian : qArr : Qubit[] pole qubit, které představuje celé číslo, kde qArr[0] označuje nejméně významný bit.LittleEndian: A qubit array qArr : Qubit[] that represents an integer where qArr[0] denotes the least significant bit.
  2. SignedLittleEndian : totéž jako LittleEndian s tím rozdílem, že představuje celé číslo se znaménkem uložené ve dvou doplňkech.SignedLittleEndian: Same as LittleEndian except that it represents a signed integer stored in two's complement.
  3. FixedPoint : představuje reálné číslo sestávající z qArr2 : Qubit[] pole qubit a umístění binárního bodu pos, které počítá počet binárních číslic nalevo od binárního bodu.FixedPoint: Represents a real number consisting of a qubit array qArr2 : Qubit[] and a binary point position pos, which counts the number of binary digits to the left of the binary point. qArr2 je uložen stejným způsobem jako SignedLittleEndian.qArr2 is stored in the same way as SignedLittleEndian.

OperationsOperations

Pro každý ze tří typů uvedených výše je k dispozici celá řada operací:For each of the three types above, a variety of operations is available:

  1. LittleEndian

    • SčítáníAddition
    • PorovnáníComparison
    • NásobeníMultiplication
    • UmocněníSquaring
    • Dělení (se zbytkem)Division (with remainder)
  2. SignedLittleEndian

    • SčítáníAddition
    • PorovnáníComparison
    • Doplněk modulo 2 pro inverzeInversion modulo 2's complement
    • NásobeníMultiplication
    • UmocněníSquaring
  3. FixedPoint

    • Příprava/inicializace na klasické hodnotyPreparation / initialization to a classical values
    • Sčítání (klasická konstanta nebo jiná pevná desetinná čárka)Addition (classical constant or other quantum fixed-point)
    • PorovnáníComparison
    • NásobeníMultiplication
    • UmocněníSquaring
    • Polynomické hodnocení pomocí specializace pro sudé a liché funkcePolynomial evaluation with specialization for even and odd functions
    • Oboustranný (1/x)Reciprocal (1/x)
    • Měření (klasická dvojitá přesnost)Measurement (classical Double)

Další informace a podrobnou dokumentaci ke každé z těchto operací najdete v tématu Referenční dokumentace knihovny Q # na adrese docs.Microsoft.com .For more information and detailed documentation for each of these operations, see the Q# library reference docs at docs.microsoft.com

Ukázka: sčítání celých číselSample: Integer addition

Jako základní příklad zvažte operaci $ $ \ket x\ket y\mapsto \ket x\ket {x + y} $ $ to znamená, že operace, která přebírá n-qubit Integer $x $ a n-nebo (n + 1)-qubit zaregistrovat $y $ jako vstup, přičemž ten, který se mapuje na součet $ (x + y) $.As a basic example, consider the operation $$ \ket x\ket y\mapsto \ket x\ket{x+y} $$ that is, an operation that takes an n-qubit integer $x$ and an n- or (n+1)-qubit register $y$ as input, the latter of which it maps to the sum $(x+y)$. Všimněte si, že součet je vypočítán modulo $2 ^ n $, pokud je $y $ Uloženo v registru $n $-bit.Note that the sum is computed modulo $2^n$ if $y$ is stored in an $n$-bit register.

Pomocí vývojové sady pro práci s více operačními systémem můžete tuto operaci použít takto:Using the Quantum Development Kit, this operation can be applied as follows:

operation MyAdditionTest (xInt : Int, yInt : Int, n : Int) : Unit
{
    using ((xQubits, yQubits) = (Qubit[n], Qubit[n]))
    {
        x = LittleEndian(xQubits); // define bit order
        y = LittleEndian(yQubits);
        
        ApplyXorInPlace(xInt, x); // initialize values
        ApplyXorInPlace(yInt, y);
        
        AddI(x, y); // perform addition x+y into y
        
        // ... (use the result)
    }
}

Ukázka: vyhodnocení hladkých funkcíSample: Evaluating smooth functions

Aby bylo možné vyhodnotit plynulé funkce, jako je $ \sin (x) $, na počítači s procesorem, kde $x $ je FixedPoint Evaluate[Even/Odd]PolynomialFxP``EvaluatePolynomialFxP číslo?To evaluate smooth functions such as $\sin(x)$ on a quantum computer, where $x$ is a quantum FixedPoint number, the Quantum Development Kit numerics library provides the operations EvaluatePolynomialFxP and Evaluate[Even/Odd]PolynomialFxP.

První EvaluatePolynomialFxPumožňuje vyhodnotit polynomu ve tvaru $ $ P (x) = A_0 + a_1x + a_2x ^ 2 + \cdots + a_dx ^ d, $ $, kde $d $ označuje stupeň.The first, EvaluatePolynomialFxP, allows to evaluate a polynomial of the form $$ P(x) = a_0 + a_1x + a_2x^2 + \cdots + a_dx^d, $$ where $d$ denotes the degree. To provedete tak, že všechno, co je potřeba, jsou polynomické koeficienty [a_0,..., a_d] (typu Double[]), vstupní x : FixedPoint a výstupní y : FixedPoint (zpočátku nula):To do so, all that is needed are the polynomial coefficients [a_0,..., a_d] (of type Double[]), the input x : FixedPoint and the output y : FixedPoint (initially zero):

EvaluatePolynomialFxP([1.0, 2.0], xFxP, yFxP);

Výsledek, $P (x) = 1 + 2x $, bude uložen v yFxP.The result, $P(x)=1+2x$, will be stored in yFxP.

Druhý, EvaluateEvenPolynomialFxPa třetí EvaluateOddPolynomialFxP, jsou specializace pro případy, které jsou i pro jiné funkce, v uvedeném pořadí.The second, EvaluateEvenPolynomialFxP, and the third, EvaluateOddPolynomialFxP, are specializations for the cases of even and odd functions, respectively. To znamená, že pro sudé/liché funkce $f (x) $ a $ $ P_ {sudý} (x) = A_0 + A_1 x ^ 2 + A_2 x ^ 4 + \cdots + a_d x ^ {2D}, $ $ $f (x) $ je přibližná, že $P _ {sudý} (x) $ nebo $P _ {liché} (x): = x\cdot P_ {sudý} (x) $ přestup.That is, for an even/odd function $f(x)$ and $$ P_{even}(x)=a_0 + a_1 x^2 + a_2 x^4 + \cdots + a_d x^{2d}, $$ $f(x)$ is approximated well by $P_{even}(x)$ or $P_{odd}(x) := x\cdot P_{even}(x)$, respectively. V Q # lze tyto dva případy zpracovat následujícím způsobem:In Q#, these two cases can be handled as follows:

EvaluateEvenPolynomialFxP([1.0, 2.0], xFxP, yFxP);

který vyhodnocuje $P _ {sudý} (x) = 1 + 2x ^ 2 $ awhich evaluates $P_{even}(x) = 1 + 2x^2$, and

EvaluateOddPolynomialFxP([1.0, 2.0], xFxP, yFxP);

který vyhodnocuje $P _ {liché} (x) = x + 2x ^ 3 $.which evaluates $P_{odd}(x) = x + 2x^3$.

Další ukázkyMore samples

Další ukázky najdete v části hlavní úložiště ukázek.You can find more samples in the main samples repository.

Začněte tím, že naklonujte úložiště a otevřete podsložku Numerics:To get started, clone the repo and open the Numerics subfolder:

git clone https://github.com/Microsoft/Quantum.git
cd Quantum/Numerics

Pak cd do jedné z ukázkových složek a spusťte ukázku prostřednictvímThen, cd into one of the sample folders and run the sample via

dotnet run