
214
11
章 量子スーパーサンプリング
// 50% gray in the corner
50%
qx.cnot(qy, 0x1);
qc.cphase(180, qy.bits(0x8, qx.bits(0x8|0x1)));
qx.cnot(qy, 0x1);
5
章の量子算術演算を用いると、図 11-7 に示すように、面白いパターンを作成できます。
// Clear the canvas
qc.reset(8);
var qx = qint.new(4, 'qx');
var qy = qint.new(4, 'qy');
qc.write(0);
qx.hadamard();
qy.hadamard();
// fun stripes
qx.subtractShifted(qy, 1);
qc.phase(180, qx.bits(0x8));
qx.addShifted(qy, 1);
図 11-7
11.3.3
曲線を描く
複雑な図形を描画するために、少し複雑な数学を使ってみましょう。例 5-3に登場した
QPU
関数
addSquared()
を使って半径
13
ピクセルの
4
分の
1
円を描画する方法を例 11-2 に示します。結果を図
11-8 に表示します。本来であれば、
qx
と
qy
の
2
乗と加算を行う際にオーバーフローしないように、よ
り大きな
10
キュビットレジスタで実行する必要があります。ここでは、
10
章で学習した方法を使い、
大きさ論理演算と ...