Skip to main content
IBM Quantum Platform

CDKMRippleCarryAdder

class qiskit.circuit.library.CDKMRippleCarryAdder(num_state_qubits, kind='full', name='CDKMRippleCarryAdder')

GitHub

ベース: Adder

2つの量子ビットレジスタのインプレース加算を行うリップルキャリー回路。

例として、キャリーインビット(kind="full")を持つ2つの3qubitサイズのレジスタに対して加算を行うリップルキャリー加算回路は以下のようになる:

        ┌──────┐                                     ┌──────┐
 cin_0: ┤2     ├─────────────────────────────────────┤2     ├
        │      │┌──────┐                     ┌──────┐│      │
   a_0: ┤0     ├┤2     ├─────────────────────┤2     ├┤0     ├
        │      ││      │┌──────┐     ┌──────┐│      ││      │
   a_1: ┤  MAJ ├┤0     ├┤2     ├─────┤2     ├┤0     ├┤  UMA ├
        │      ││      ││      │     │      ││      ││      │
   a_2: ┤      ├┤  MAJ ├┤0     ├──■──┤0     ├┤  UMA ├┤      ├
        │      ││      ││      │  │  │      ││      ││      │
   b_0: ┤1     ├┤      ├┤  MAJ ├──┼──┤  UMA ├┤      ├┤1     ├
        └──────┘│      ││      │  │  │      ││      │└──────┘
   b_1: ────────┤1     ├┤      ├──┼──┤      ├┤1     ├────────
                └──────┘│      │  │  │      │└──────┘
   b_2: ────────────────┤1     ├──┼──┤1     ├────────────────
                        └──────┘┌─┴─┐└──────┘
cout_0: ────────────────────────┤ X ├────────────────────────
                                └───┘

ここで MAJ ゲートと UMA ゲートは [1.] で紹介したゲートに対応する。 この実装では、入力レジスタの量子ビットは、最初の入力レジスタからの全ての量子ビットの後に、2番目の入力レジスタからの全ての量子ビットが続くように並べられていることに注意されたい。

種類の加算器がサポートされている。 引数 kind を設定することで、キャリーインを持たない半加算器や、キャリーインもキャリーアウトも持たない固定サイズの加算器を選択することもできる。 全加算器とは異なり、これらの回路はヘルパー量子ビットを1つ追加する必要がある。

3qubitサイズの入力に対する固定小数点加算器(kind="fixed")の回路図は以下の通り

        ┌──────┐┌──────┐                ┌──────┐┌──────┐
   a_0: ┤0     ├┤2     ├────────────────┤2     ├┤0     ├
        │      ││      │┌──────┐┌──────┐│      ││      │
   a_1: ┤      ├┤0     ├┤2     ├┤2     ├┤0     ├┤      ├
        │      ││      ││      ││      ││      ││      │
   a_2: ┤      ├┤  MAJ ├┤0     ├┤0     ├┤  UMA ├┤      ├
        │      ││      ││      ││      ││      ││      │
   b_0: ┤1 MAJ ├┤      ├┤  MAJ ├┤  UMA ├┤      ├┤1 UMA ├
        │      ││      ││      ││      ││      ││      │
   b_1: ┤      ├┤1     ├┤      ├┤      ├┤1     ├┤      ├
        │      │└──────┘│      ││      │└──────┘│      │
   b_2: ┤      ├────────┤1     ├┤1     ├────────┤      ├
        │      │        └──────┘└──────┘        │      │
help_0: ┤2     ├────────────────────────────────┤2     ├
        └──────┘                                └──────┘

キャリーアウトを持たないので、フル・アダーより1量子ビットが少ないが、キャリーインの代わりにヘルパー量子ビットを使うので、2量子ビットではなく1量子ビット少ないだけである。

関連資料

以下の汎用ゲート・オブジェクトは、この回路クラスと同様に加算を行うが、コンパイラがコンテキストに基づいて最適な分解を選択できるようになっている。 具体的な実装は HLSConfig例えば、この回路は Adder=["ripple_c04"]

ModularAdderGate:一般的なインプレース加算器、モジュロ 2n2^n。この

kind="fixed" と機能的に等価である。

AdderGate:汎用のインプレース加算器。 この

kind="half" と機能的に等価である。

FullAdderGate:キャリーインビットを持つ一般的なインプレース加算器。 この

kind="full" と機能的に等価である。

参照資料:

[1] クーカロほか 新しい量子リップルキャリー加算回路, 2004. arXiv:quant-ph/0410184

[2] ヴェドラル他 初等算術演算のための量子ネットワーク, 1995. arXiv:quant-ph/9511018

パラメーター

  • num_state_qubits (int) – 状態 a|a\rangle または b|b\rangle のどちらかの入力レジスタの量子ビット数。 2つの入力レジスタは同じ数の量子ビットを持たなければならない。
  • kind (str) – 加算器の種類は、全加算器の場合は 'full' 、半加算器の場合は 'half' 、固定サイズ加算器の場合は 'fixed' 。 フル加算器にはキャリーインとキャリーアウトの両方が含まれ、ハーフ加算器にはキャリーアウトのみが含まれ、固定サイズ加算器にはキャリーインもキャリーアウトも含まれない。
  • name (str) – 回路オブジェクトの名前。

レイズ

ValueError - num_state_qubits が1より小さい場合。


属性

name

タイプ: str

人間が読める回路名。

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。