VBERippleCarryAdder
class qiskit.circuit.library.VBERippleCarryAdder(num_state_qubits, kind='full', name='VBERippleCarryAdder')
베이스: Adder
VBE 리플 캐리 가산기 [1].
이 회로는 동일한 크기의 양자 레지스터 두 개를 제자리에서 더합니다. 예를 들어, 2쿼비트 크기의 레지스터 2개에서 전체 덧셈을 수행하는(즉, 캐리인 비트 포함) 고전적인 가산기 회로는 다음과 같습니다:
┌────────┐ ┌───────────┐┌──────┐
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 ├────────
└────────┘└────────┘ └──────┘└───────────┘여기서 캐리(Carry) 게이트와 썸(Sum) 게이트는 [1절] 에서 소개된 게이트에 해당합니다. Carry_dg는 Carry 게이트의 역게이트에 해당합니다. 이 구현 방식에서는 입력 레지스터의 큐비트가 첫 번째 입력 레지스터의 모든 큐비트가 먼저 오고, 그 다음에 두 번째 입력 레지스터의 모든 큐비트가 오는 순서로 배열된다는 점에 유의하십시오. 이는 [1] 번의 그림 2와 순서가 다르기 때문에 회로도가 다르게 그려집니다.
다음 일반 게이트 객체는 이 회로 클래스와 같이 추가를 수행하지만 컴파일러가 컨텍스트에 따라 최적의 분해를 선택할 수 있도록 합니다. 구체적인 구현은 HLSConfig를 통해 설정할 수 있습니다(예: 이 회로는 Adder=["ripple_v95"] 에서 선택할 수 있습니다).
ModularAdderGate: 일반 인플레이스 가산기, 모듈로 . 이
는 kind="fixed" 와 기능적으로 동일합니다.
AdderGate: 일반적인 인플레이스 가산기입니다. 이것 역시
는 kind="half" 와 기능적으로 동일합니다.
FullAdderGate: 캐리 인 비트가 있는 일반 인플레이스 가산기입니다. 이것 역시
는 kind="full" 와 기능적으로 동일합니다.
참조 자료:
[1] 베드랄 외., 초등 산술 연산을 위한 양자 네트워크, 1995. arXiv:quant-ph/9511018
매개변수
- num_state_qubits (int) – 레지스터의 크기입니다.
- 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