你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Quantum 数字库
概述
数字库包括三个组件
- 基本整数算法,带有整数添加器和比较运算符
- 高级整数功能,它建立在基本功能之上,包括有符号和无符号整数的乘法、除法、求逆等。
- 定点算术功能,包含定点初始化、加法、乘法、倒数、多项式求值和度量。
可以使用单个 open 语句访问所有这些组件:
open Microsoft.Quantum.Arithmetic;
类型
数字库支持以下类型
LittleEndian:表示整数的量子比特数组qArr : Qubit[],其中qArr[0]表示最小有效位。SignedLittleEndian:与LittleEndian相同,只不过它表示以二进制补码存储的有符号整数。FixedPoint:表示一个实数,它由一个量子比特数组qArr2 : Qubit[]和一个二进制点位置pos组成,该位置对二进制点左边的二进制数进行计数。qArr2的存储方式与SignedLittleEndian相同。
Operations
对于上述三种类型中的每一种,都可以进行多种操作:
LittleEndian- 加法
- 比较
- 乘法
- 平方
- 除法(带余数)
SignedLittleEndian- 加法
- 比较
- 取反二补数
- 乘法
- 平方
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 开发工具包数字库提供了操作 EvaluatePolynomialFxP 和 Evaluate[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