Skip to main content
IBM Quantum Platform

VBERippleCarryAdder

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

GitHub

Basen: Adder

Der VBE-Ripple-Carry-Addierer [1].

Diese Schaltung führt eine Inplace-Addition zweier gleich großer Quantenregister durch. Ein Beispiel für eine klassische Addierschaltung, die eine vollständige Addition (d. h. einschließlich eines Übertragsbits) auf zwei 2-Qubit-Registern durchführt, sieht wie folgt aus:

          ┌────────┐                       ┌───────────┐┌──────┐
   cin_0: ┤0       ├───────────────────────┤0          ├┤0     ├
          │        │                       │           ││      │
     a_0: ┤1       ├───────────────────────┤1          ├┤1     ├
          │        │┌────────┐     ┌──────┐│           ││  Sum │
     a_1: ┤        ├┤1       ├──■──┤1     ├┤           ├┤      ├
          │        ││        │  │  │      ││           ││      │
     b_0: ┤2 Carry ├┤        ├──┼──┤      ├┤2 Carry_dg ├┤2     ├
          │        ││        │┌─┴─┐│      ││           │└──────┘
     b_1: ┤        ├┤2 Carry ├┤ X ├┤2 Sum ├┤           ├────────
          │        ││        │└───┘│      ││           │
  cout_0: ┤        ├┤3       ├─────┤      ├┤           ├────────
          │        ││        │     │      ││           │
helper_0: ┤3       ├┤0       ├─────┤0     ├┤3          ├────────
          └────────┘└────────┘     └──────┘└───────────┘

Hier entsprechen die Carry- und Sum-Gatter den in [Abschnitt 1] vorgestellten Gatter. Carry_dg entspricht der Umkehrung des Carry -Gatters. Beachten Sie, dass in dieser Implementierung die Qubits der Eingangsregister so angeordnet sind, dass zuerst alle Qubits aus dem ersten Eingangsregister und anschließend alle Qubits aus dem zweiten Eingangsregister folgen. Dies ist eine andere Anordnung als in Abbildung 2 in [1], was zu einer anderen Darstellung der Schaltung führt.

Siehe auch

Die folgenden generischen Gatterobjekte führen wie diese Schaltkreisklasse Additionen durch, ermöglichen es dem Compiler jedoch, die optimale Zerlegung auf der Grundlage des Kontexts auszuwählen. Spezifische Implementierungen können über die HLSConfigeingestellt werden, z.B. kann diese Schaltung über Adder=["ripple_v95"] gewählt werden.

ModularAdderGate: Ein generischer Inplace-Addierer, modulo 2n2^n. Diese

ist funktional äquivalent zu kind="fixed".

AdderGate: Ein allgemeiner Inplace-Addierer. Diese

ist funktional äquivalent zu kind="half".

FullAdderGate: Ein generischer Inplace-Addierer mit einem Carry-In-Bit. Diese

ist funktional äquivalent zu kind="full".

Quellenangaben:

[1] Vedral et al, Quantennetzwerke für elementare arithmetische Operationen, 1995. arXiv:quant-ph/9511018

Parameter

  • num_state_qubits (int) – Die Größe des Registers.
  • kind (str) – Die Art des Addierers kann 'full' für einen Volladdierer, 'half' für einen Halbaddierer oder 'fixed' für einen Addierer fester Größe sein. Ein Volladdierer enthält sowohl Übertrag als auch Übertrag, ein Halbaddierer nur Übertrag, und ein Addierer fester Größe weder Übertrag noch Übertrag.
  • name (str) – Der Name des Stromkreises.

Erhöht

ValueError - Wenn num_state_qubits kleiner als 1 ist.


Attribute

name

Typ: str

Ein von Menschen lesbarer Name für den Stromkreis.

Beispiel

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.