你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Quantum 数字库

概述

数字库包括三个组件

  1. 基本整数算法,带有整数添加器和比较运算符
  2. 高级整数功能,它建立在基本功能之上,包括有符号和无符号整数的乘法、除法、求逆等。
  3. 定点算术功能,包含定点初始化、加法、乘法、倒数、多项式求值和度量。

可以使用单个 open 语句访问所有这些组件:

open Microsoft.Quantum.Arithmetic;

类型

数字库支持以下类型

  1. LittleEndian :表示整数的量子比特数组 qArr : Qubit[],其中 qArr[0] 表示最小有效位。
  2. SignedLittleEndian :与 LittleEndian 相同,只不过它表示以二进制补码存储的有符号整数。
  3. FixedPoint :表示一个实数,它由一个量子比特数组 qArr2 : Qubit[] 和一个二进制点位置 pos 组成,该位置对二进制点左边的二进制数进行计数。 qArr2 的存储方式与 SignedLittleEndian 相同。

Operations

对于上述三种类型中的每一种,都可以进行多种操作:

  1. LittleEndian

    • 加法
    • 比较
    • 乘法
    • 平方
    • 除法(带余数)
  2. SignedLittleEndian

    • 加法
    • 比较
    • 取反二补数
    • 乘法
    • 平方
  3. FixedPoint

    • 准备/初始化为经典值
    • 加法(经典常数或其他量子定点)
    • 比较
    • 乘法
    • 平方
    • 针对奇偶函数的多项式求值
    • 倒数 (1/x)
    • 度量值(经典双精度)

示例:整数加法

一个基本示例是操作 $$ \ket x\ket y\mapsto \ket x\ket{x+y} $$,该操作将一个 n 量子比特整数 $x$ 和一个 n 或 (n+1) 量子比特寄存器 $y$ 作为输入,并将后者映射到总和 $(x+y)$。 请注意,如果 $y$ 存储在 $n$ 位寄存器中,则总和是以 $2^n$ 为模计算的。

使用 Quantum 开发工具包,可以按如下所示应用此操作:

operation TestMyAddition(xValue : Int, yValue : Int, n : Int) : Unit {
    use (xQubits, yQubits) = (Qubit[n], Qubit[n]);
    let x = LittleEndian(xQubits); // define bit order
    let y = LittleEndian(yQubits);

    ApplyXorInPlace(xValue, x); // initialize values
    ApplyXorInPlace(yValue, y);

    AddI(x, y); // perform addition x+y into y

    // ... (use the result)
    
}

示例:计算平滑函数

为了计算平滑函数,例如量子计算机上的 $\sin(x)$(其中 $x$ 是一个量子 FixedPoint 数),Quantum 开发工具包数字库提供了操作 EvaluatePolynomialFxPEvaluate[Even/Odd]PolynomialFxP

第一个,EvaluatePolynomialFxP,允许计算形式为 $$ P(x) = a_0 + a_1x + a_2x^2 + \cdots + a_dx^d, $$ 的多项式,其中 $d$ 表示次数。 为此,只需要多项式系数 [a_0,..., a_d](类型 Double[]),输入 x : FixedPoint 和输出 y : FixedPoint(初始值为零):

EvaluatePolynomialFxP([1.0, 2.0], x, y);

结果 $P(x)=1+2x$ 将存储在 yFxP 中。

第二个 EvaluateEvenPolynomialFxP 和第三个 EvaluateOddPolynomialFxP 是分别专门针对奇偶函数的。 也就是说,对于偶/奇函数 $f(x)$ 和 $$ P_{even}(x)=a_0 + a_1 x^2 + a_2 x^4 + \cdots + a_d x^{2d},$$ $f(x)$ 分别用 $P_{even}(x)$ 或 $P_{odd}(x) := x\cdot P_{even}(x)$ 近似。 在 Q# 中,这两种情况可以按如下方式进行处理:

EvaluateEvenPolynomialFxP([1.0, 2.0], x, y);

计算 $P_{even}(x) = 1 + 2x^2$ 和

EvaluateOddPolynomialFxP([1.0, 2.0], x, y);

计算 $P_{odd}(x) = x + 2x^3$。

更多示例

可以在主示例库中找到更多示例。

若要开始,请克隆存储库并打开 Numerics 子文件夹:

git clone https://github.com/Microsoft/Quantum.git
cd Quantum/samples/numerics

然后,cd 进入示例文件夹之一,并通过运行示例

dotnet run