Qrack
9.0
General classical-emulating-quantum development framework
|
Classes | |
union | complex2 |
SIMD implementation of the double precision complex vector type of 2 complex numbers, only for AVX Apply2x2. More... | |
class | DispatchQueue |
struct | OCLKernelHandle |
class | OCLDeviceCall |
class | OCLDeviceContext |
struct | InitOClResult |
class | OCLEngine |
"Qrack::OCLEngine" manages the single OpenCL context. More... | |
class | ParallelFor |
class | RdRandom |
struct | HamiltonianOp |
A Hamiltonian can be specified in terms of arbitrary controlled single bit gates, each one an "HamiltonianOp.". More... | |
struct | UniformHamiltonianOp |
struct | MpsShard |
class | QAlu |
class | QBdt |
class | QBdtNode |
class | QBdtNodeInterface |
class | QBdtHybrid |
A "Qrack::QBdtHybrid" internally switched between Qrack::QBdt and Qrack::QHybrid to maximize entanglement-dependent performance. More... | |
struct | QCircuitGate |
class | QCircuit |
class | QEngine |
Abstract QEngine implementation, for all "Schroedinger method" engines. More... | |
class | QEngineCPU |
General purpose QEngineCPU implementation. More... | |
struct | QueueItem |
class | PoolItem |
class | QEngineCUDA |
OpenCL enhanced QEngineCPU implementation. More... | |
class | bad_alloc |
class | QEngineOCL |
OpenCL enhanced QEngineCPU implementation. More... | |
struct | PhaseShard |
Caches controlled gate phase between shards, (as a case of "gate fusion" optimization particularly useful to QUnit) More... | |
class | QEngineShard |
Associates a QInterface object with a set of bits. More... | |
class | QEngineShardMap |
class | QHybrid |
A "Qrack::QHybrid" internally switched between Qrack::QEngineCPU and Qrack::QEngineOCL to maximize qubit-count-dependent performance. More... | |
class | QInterface |
A "Qrack::QInterface" is an abstract interface exposing qubit permutation state vector with methods to operate on it as by gates and register-like instructions. More... | |
class | QNeuron |
class | QPager |
A "Qrack::QPager" splits a "Qrack::QEngine" implementation into equal-length "pages." This helps both optimization and distribution of a single coherent quantum register across multiple devices. More... | |
class | QParity |
struct | AmplitudeEntry |
class | QStabilizer |
struct | QUnitCliffordAmp |
class | QStabilizerHybrid |
A "Qrack::QStabilizerHybrid" internally switched between Qrack::QStabilizer and Qrack::QEngine to maximize performance. More... | |
class | QTensorNetwork |
class | QubitSwapMap |
class | QUnit |
struct | CliffordShard |
class | QUnitClifford |
struct | QEngineInfo |
struct | DeviceInfo |
class | QUnitMulti |
class | StateVector |
class | StateVectorArray |
class | StateVectorSparse |
Typedefs | |
typedef std::function< void(void)> | DispatchFn |
typedef std::shared_ptr< OCLDeviceContext > | DeviceContextPtr |
typedef std::vector< cl::Event > | EventVec |
typedef std::shared_ptr< EventVec > | EventVecPtr |
typedef std::complex< half_float::half > | complex |
typedef half_float::half | real1 |
typedef float | real1_f |
typedef float | real1_s |
typedef std::shared_ptr< complex > | BitOp |
typedef std::function< void(const bitCapIntOcl &, const unsigned &cpu)> | ParallelFunc |
typedef std::function< bitCapIntOcl(const bitCapIntOcl &)> | IncrementFunc |
typedef std::function< bitCapInt(const bitCapInt &)> | BdtFunc |
typedef std::function< void(const bitCapInt &, const unsigned &cpu)> | ParallelFuncBdt |
typedef std::shared_ptr< StateVector > | StateVectorPtr |
typedef std::shared_ptr< StateVectorArray > | StateVectorArrayPtr |
typedef std::shared_ptr< StateVectorSparse > | StateVectorSparsePtr |
typedef std::shared_ptr< QEngine > | QEnginePtr |
typedef std::shared_ptr< HamiltonianOp > | HamiltonianOpPtr |
To define a Hamiltonian, give a vector of controlled single bit gates ("HamiltonianOp" instances) that are applied by left-multiplication in low-to-high vector index order on the state vector. More... | |
typedef std::vector< HamiltonianOpPtr > | Hamiltonian |
typedef std::shared_ptr< MpsShard > | MpsShardPtr |
typedef std::shared_ptr< QAlu > | QAluPtr |
typedef std::shared_ptr< QBdt > | QBdtPtr |
typedef std::shared_ptr< QBdtNode > | QBdtNodePtr |
typedef std::shared_ptr< QBdtNodeInterface > | QBdtNodeInterfacePtr |
typedef std::shared_ptr< QBdtHybrid > | QBdtHybridPtr |
typedef std::shared_ptr< QCircuitGate > | QCircuitGatePtr |
typedef std::shared_ptr< QCircuit > | QCircuitPtr |
typedef std::shared_ptr< QEngineCPU > | QEngineCPUPtr |
typedef unsigned long | cl_map_flags |
typedef unsigned long | cl_mem_flags |
typedef std::shared_ptr< void > | BufferPtr |
typedef std::shared_ptr< QEngineCUDA > | QEngineCUDAPtr |
typedef std::shared_ptr< PoolItem > | PoolItemPtr |
typedef std::shared_ptr< QEngineOCL > | QEngineOCLPtr |
typedef QEngineShard * | QEngineShardPtr |
typedef std::shared_ptr< PhaseShard > | PhaseShardPtr |
typedef std::map< QEngineShardPtr, PhaseShardPtr > | ShardToPhaseMap |
typedef std::shared_ptr< QHybrid > | QHybridPtr |
typedef std::shared_ptr< QInterface > | QInterfacePtr |
typedef std::shared_ptr< QNeuron > | QNeuronPtr |
typedef std::shared_ptr< QPager > | QPagerPtr |
typedef std::shared_ptr< QParity > | QParityPtr |
typedef std::shared_ptr< QStabilizer > | QStabilizerPtr |
typedef std::shared_ptr< QStabilizerHybrid > | QStabilizerHybridPtr |
typedef std::shared_ptr< QTensorNetwork > | QTensorNetworkPtr |
typedef std::shared_ptr< QUnit > | QUnitPtr |
typedef std::shared_ptr< QUnitClifford > | QUnitCliffordPtr |
typedef std::shared_ptr< QUnitMulti > | QUnitMultiPtr |
Functions | |
complex2 | mtrxColShuff (const complex2 &mtrxCol) |
complex2 | matrixMul (const complex2 &mtrxCol1, const complex2 &mtrxCol2, const complex2 &mtrxCol1Shuff, const complex2 &mtrxCol2Shuff, const complex2 &qubit) |
complex2 | matrixMul (const float &nrm, const complex2 &mtrxCol1, const complex2 &mtrxCol2, const complex2 &mtrxCol1Shuff, const complex2 &mtrxCol2Shuff, const complex2 &qubit) |
complex2 | operator* (const double &lhs, const complex2 &rhs) |
double | norm (const complex2 &c) |
complex2 | operator* (const float &lhs, const complex2 &rhs) |
bitCapInt | pow2 (const bitLenInt &p) |
bitCapIntOcl | pow2Ocl (const bitLenInt &p) |
bitCapInt | pow2Mask (const bitLenInt &p) |
bitCapIntOcl | pow2MaskOcl (const bitLenInt &p) |
bitLenInt | log2 (bitCapInt n) |
bitCapInt | bitSlice (const bitLenInt &bit, const bitCapInt &source) |
bitCapIntOcl | bitSliceOcl (const bitLenInt &bit, const bitCapIntOcl &source) |
bitCapInt | bitRegMask (const bitLenInt &start, const bitLenInt &length) |
bitCapIntOcl | bitRegMaskOcl (const bitLenInt &start, const bitLenInt &length) |
bool | isPowerOfTwo (const bitCapInt &x) |
bool | isBadBitRange (const bitLenInt &start, const bitLenInt &length, const bitLenInt &qubitCount) |
bool | isBadPermRange (const bitCapIntOcl &start, const bitCapIntOcl &length, const bitCapIntOcl &maxQPowerOcl) |
void | ThrowIfQbIdArrayIsBad (const std::vector< bitLenInt > &controls, const bitLenInt &qubitCount, std::string message) |
unsigned char * | cl_alloc (size_t ucharCount) |
void | cl_free (void *toFree) |
void | mul2x2 (complex const *left, complex const *right, complex *out) |
void | exp2x2 (complex const *matrix2x2, complex *outMatrix2x2) |
void | log2x2 (complex const *matrix2x2, complex *outMatrix2x2) |
void | inv2x2 (complex const *matrix2x2, complex *outMatrix2x2) |
bool | isOverflowAdd (bitCapInt inOutInt, bitCapInt inInt, const bitCapInt &signMask, const bitCapInt &lengthPower) |
Check if an addition with overflow sets the flag. More... | |
bool | isOverflowSub (bitCapInt inOutInt, bitCapInt inInt, const bitCapInt &signMask, const bitCapInt &lengthPower) |
Check if a subtraction with overflow sets the flag. More... | |
bitCapInt | pushApartBits (const bitCapInt &perm, const std::vector< bitCapInt > &skipPowers) |
bitCapInt | intPow (bitCapInt base, bitCapInt power) |
bitCapIntOcl | intPowOcl (bitCapIntOcl base, bitCapIntOcl power) |
bool | operator== (QBdtNodeInterfacePtr lhs, QBdtNodeInterfacePtr rhs) |
bool | operator!= (QBdtNodeInterfacePtr lhs, QBdtNodeInterfacePtr rhs) |
std::ostream & | operator<< (std::ostream &os, const QCircuitGatePtr g) |
std::istream & | operator>> (std::istream &os, QCircuitGatePtr &g) |
std::ostream & | operator<< (std::ostream &os, const QCircuitPtr g) |
std::istream & | operator>> (std::istream &os, QCircuitPtr &g) |
template<class BidirectionalIterator > | |
void | reverse (BidirectionalIterator first, BidirectionalIterator last, bitCapInt stride) |
template<class BidirectionalIterator > | |
void | rotate (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, bitCapInt stride) |
template<typename... Ts> | |
QInterfacePtr | CreateQuantumInterface (QInterfaceEngine engine1, QInterfaceEngine engine2, QInterfaceEngine engine3, Ts... args) |
Factory method to create specific engine implementations. More... | |
template<typename... Ts> | |
QInterfacePtr | CreateQuantumInterface (QInterfaceEngine engine1, QInterfaceEngine engine2, Ts... args) |
template<typename... Ts> | |
QInterfacePtr | CreateQuantumInterface (QInterfaceEngine engine, Ts... args) |
template<typename... Ts> | |
QInterfacePtr | CreateQuantumInterface (std::vector< QInterfaceEngine > engines, Ts... args) |
template<typename... Ts> | |
QInterfacePtr | CreateArrangedLayers (bool md, bool sd, bool sh, bool bdt, bool pg, bool tn, bool hy, bool oc, Ts... args) |
void | _expLog2x2 (complex const *matrix2x2, complex *outMatrix2x2, bool isExp) |
std::vector< std::string > | _readDirectoryFileNames (const std::string &path) |
std::string | _getDefaultRandomNumberFilePath () |
void CL_CALLBACK | _PopQueue (cl_event event, cl_int type, void *user_data) |
REG_GATE_1 (H) | |
Apply Hadamard gate to each bit in "length," starting from bit index "start". More... | |
real1_f | dyadAngle (int numerator, int denomPower) |
std::ostream & | operator<< (std::ostream &os, const QStabilizerPtr s) |
std::istream & | operator>> (std::istream &is, const QStabilizerPtr s) |
std::ostream & | operator<< (std::ostream &os, const QStabilizerHybridPtr s) |
std::istream & | operator>> (std::istream &is, const QStabilizerHybridPtr s) |
std::ostream & | operator<< (std::ostream &os, const QUnitCliffordPtr s) |
std::istream & | operator>> (std::istream &is, const QUnitCliffordPtr s) |
typedef std::function<bitCapInt(const bitCapInt&)> Qrack::BdtFunc |
typedef std::shared_ptr<complex> Qrack::BitOp |
typedef std::shared_ptr< cl::Buffer > Qrack::BufferPtr |
typedef unsigned long Qrack::cl_map_flags |
typedef unsigned long Qrack::cl_mem_flags |
typedef std::complex<half_float::half> Qrack::complex |
typedef std::shared_ptr<OCLDeviceContext> Qrack::DeviceContextPtr |
typedef std::function< void(void)> Qrack::DispatchFn |
typedef std::vector<cl::Event> Qrack::EventVec |
typedef std::shared_ptr<EventVec> Qrack::EventVecPtr |
typedef std::vector<HamiltonianOpPtr> Qrack::Hamiltonian |
typedef std::shared_ptr<HamiltonianOp> Qrack::HamiltonianOpPtr |
To define a Hamiltonian, give a vector of controlled single bit gates ("HamiltonianOp" instances) that are applied by left-multiplication in low-to-high vector index order on the state vector.
To specify Hamiltonians with interaction terms, arbitrary sets of control bits may be specified for each term, in which case the term is acted only if the (superposable) control bits are true. The "antiCtrled" bool flips the overall convention, such that the term is acted only if all control bits are false. Additionally, for a combination of control bits and "anti-control" bits, an array of booleans, "ctrlToggles," of length "ctrlLen" may be specified that flips the activation state for each control bit, (relative the global anti- on/off convention,) without altering the state of the control bits.
The point of this "toggle" behavior is to allow enumeration of arbitrary local Hamiltonian terms with permutations of a set of control bits. For example, a Hamiltonian might represent an array of local electromagnetic potential wells. If there are 4 wells, each with independent potentials, control "toggles" could be used on two control bits, to enumerate all four permutations of two control bits with four different local Hamiltonian terms.
As a general point of linear algebra, where A and B are linear operators, e^{i * (A + B) * t} = e^{i * A * t} * e^{i * B * t} might NOT hold, if the operators A and B do not commute. As a rule of thumb, A will commute with B at least in the case that A and B act on entirely different sets of qubits. However, for defining the intended Hamiltonian, the programmer can be guaranteed that the exponential factors will be applied right-to-left, by left multiplication, in the order e^(i * H_(N - 1) * t) * e^(i * H_(N - 2) * t) * ... e^(i * H_0 * t) * |psi>. (For example, if A and B are single bit gates acting on the same bit, form their composition into one gate by the intended right-to-left fusion and apply them as a single HamiltonianOp.)
typedef std::function<bitCapIntOcl(const bitCapIntOcl&)> Qrack::IncrementFunc |
typedef std::shared_ptr<MpsShard> Qrack::MpsShardPtr |
typedef std::function<void(const bitCapIntOcl&, const unsigned& cpu)> Qrack::ParallelFunc |
typedef std::function<void(const bitCapInt&, const unsigned& cpu)> Qrack::ParallelFuncBdt |
typedef std::shared_ptr<PhaseShard> Qrack::PhaseShardPtr |
typedef std::shared_ptr< PoolItem > Qrack::PoolItemPtr |
typedef std::shared_ptr<QAlu> Qrack::QAluPtr |
typedef std::shared_ptr<QBdtHybrid> Qrack::QBdtHybridPtr |
typedef std::shared_ptr<QBdtNodeInterface> Qrack::QBdtNodeInterfacePtr |
typedef std::shared_ptr<QBdtNode> Qrack::QBdtNodePtr |
typedef std::shared_ptr<QBdt> Qrack::QBdtPtr |
typedef std::shared_ptr<QCircuitGate> Qrack::QCircuitGatePtr |
typedef std::shared_ptr<QCircuit> Qrack::QCircuitPtr |
typedef std::shared_ptr<QEngineCPU> Qrack::QEngineCPUPtr |
typedef std::shared_ptr<QEngineCUDA> Qrack::QEngineCUDAPtr |
typedef std::shared_ptr<QEngineOCL> Qrack::QEngineOCLPtr |
typedef std::shared_ptr< QEngine > Qrack::QEnginePtr |
typedef QEngineShard* Qrack::QEngineShardPtr |
typedef std::shared_ptr<QHybrid> Qrack::QHybridPtr |
typedef std::shared_ptr<QInterface> Qrack::QInterfacePtr |
typedef std::shared_ptr<QNeuron> Qrack::QNeuronPtr |
typedef std::shared_ptr<QPager> Qrack::QPagerPtr |
typedef std::shared_ptr<QParity> Qrack::QParityPtr |
typedef std::shared_ptr<QStabilizerHybrid> Qrack::QStabilizerHybridPtr |
typedef std::shared_ptr<QStabilizer> Qrack::QStabilizerPtr |
typedef std::shared_ptr<QTensorNetwork> Qrack::QTensorNetworkPtr |
typedef std::shared_ptr<QUnitClifford> Qrack::QUnitCliffordPtr |
typedef std::shared_ptr<QUnitMulti> Qrack::QUnitMultiPtr |
typedef std::shared_ptr<QUnit> Qrack::QUnitPtr |
typedef half_float::half Qrack::real1 |
typedef float Qrack::real1_f |
typedef float Qrack::real1_s |
typedef std::map<QEngineShardPtr, PhaseShardPtr> Qrack::ShardToPhaseMap |
typedef std::shared_ptr<StateVectorArray> Qrack::StateVectorArrayPtr |
typedef std::shared_ptr<StateVector> Qrack::StateVectorPtr |
typedef std::shared_ptr<StateVectorSparse> Qrack::StateVectorSparsePtr |
enum Qrack::OCLAPI |
enum Qrack::Pauli |
Enumerated list of Pauli bases.
Enumerated list of supported engines.
Use QINTERFACE_OPTIMAL for the best supported engine.
Enumerator | |
---|---|
QINTERFACE_CPU | Create a QEngineCPU leveraging only local CPU and memory resources. |
QINTERFACE_OPENCL | Create a QEngineOCL, leveraging OpenCL hardware to increase the speed of certain calculations. |
QINTERFACE_CUDA | Create a QEngineCUDA, leveraging CUDA hardware to increase the speed of certain calculations. |
QINTERFACE_HYBRID | Create a QHybrid, switching between QEngineCPU and QEngineOCL as efficient. |
QINTERFACE_BDT | Create a QBinaryDecisionTree, (CPU-based). |
QINTERFACE_BDT_HYBRID | Create a QBinaryDecisionTree, (CPU-based). |
QINTERFACE_STABILIZER | Create a QStabilizer, limited to Clifford/Pauli operations, but efficient. |
QINTERFACE_STABILIZER_HYBRID | Create a QStabilizerHybrid, switching between a QStabilizer and a QHybrid as efficient. |
QINTERFACE_QPAGER | Create a QPager, which breaks up the work of a QEngine into equally sized "pages.". |
QINTERFACE_QUNIT | Create a QUnit, which utilizes other QInterface classes to minimize the amount of work that's needed for any given operation based on the entanglement of the bits involved. This, combined with QINTERFACE_OPTIMAL, is the recommended object to use as a library consumer. |
QINTERFACE_QUNIT_MULTI | Create a QUnitMulti, which distributes the explicitly separated "shards" of a QUnit across available OpenCL devices. |
QINTERFACE_QUNIT_CLIFFORD | Clifford-specialized QUnit. |
QINTERFACE_TENSOR_NETWORK | Circuit-simplification layer, with (optional) recourse to cuTensorNetwork. |
QINTERFACE_OPTIMAL_SCHROEDINGER | |
QINTERFACE_OPTIMAL_BASE | |
QINTERFACE_OPTIMAL | |
QINTERFACE_OPTIMAL_MULTI | |
QINTERFACE_MAX |
enum Qrack::SPECIAL_2X2 |
std::string Qrack::_getDefaultRandomNumberFilePath | ( | ) |
void CL_CALLBACK Qrack::_PopQueue | ( | cl_event | event, |
cl_int | type, | ||
void * | user_data | ||
) |
std::vector<std::string> Qrack::_readDirectoryFileNames | ( | const std::string & | path | ) |
|
inline |
|
inline |
unsigned char * Qrack::cl_alloc | ( | size_t | ucharCount | ) |
void Qrack::cl_free | ( | void * | toFree | ) |
QInterfacePtr Qrack::CreateArrangedLayers | ( | bool | md, |
bool | sd, | ||
bool | sh, | ||
bool | bdt, | ||
bool | pg, | ||
bool | tn, | ||
bool | hy, | ||
bool | oc, | ||
Ts... | args | ||
) |
QInterfacePtr Qrack::CreateQuantumInterface | ( | QInterfaceEngine | engine, |
Ts... | args | ||
) |
QInterfacePtr Qrack::CreateQuantumInterface | ( | QInterfaceEngine | engine1, |
QInterfaceEngine | engine2, | ||
QInterfaceEngine | engine3, | ||
Ts... | args | ||
) |
Factory method to create specific engine implementations.
QInterfacePtr Qrack::CreateQuantumInterface | ( | QInterfaceEngine | engine1, |
QInterfaceEngine | engine2, | ||
Ts... | args | ||
) |
QInterfacePtr Qrack::CreateQuantumInterface | ( | std::vector< QInterfaceEngine > | engines, |
Ts... | args | ||
) |
|
inline |
bitCapIntOcl Qrack::intPowOcl | ( | bitCapIntOcl | base, |
bitCapIntOcl | power | ||
) |
|
inline |
|
inline |
bool Qrack::isOverflowAdd | ( | bitCapInt | inOutInt, |
bitCapInt | inInt, | ||
const bitCapInt & | signMask, | ||
const bitCapInt & | lengthPower | ||
) |
Check if an addition with overflow sets the flag.
bool Qrack::isOverflowSub | ( | bitCapInt | inOutInt, |
bitCapInt | inInt, | ||
const bitCapInt & | signMask, | ||
const bitCapInt & | lengthPower | ||
) |
Check if a subtraction with overflow sets the flag.
|
inline |
|
inline |
|
inline |
|
inline |
bool Qrack::operator!= | ( | QBdtNodeInterfacePtr | lhs, |
QBdtNodeInterfacePtr | rhs | ||
) |
std::ostream & Qrack::operator<< | ( | std::ostream & | os, |
const QCircuitGatePtr | g | ||
) |
std::ostream & Qrack::operator<< | ( | std::ostream & | os, |
const QCircuitPtr | g | ||
) |
std::ostream& Qrack::operator<< | ( | std::ostream & | os, |
const QStabilizerHybridPtr | s | ||
) |
std::ostream& Qrack::operator<< | ( | std::ostream & | os, |
const QStabilizerPtr | s | ||
) |
std::ostream& Qrack::operator<< | ( | std::ostream & | os, |
const QUnitCliffordPtr | s | ||
) |
bool Qrack::operator== | ( | QBdtNodeInterfacePtr | lhs, |
QBdtNodeInterfacePtr | rhs | ||
) |
std::istream& Qrack::operator>> | ( | std::istream & | is, |
const QStabilizerHybridPtr | s | ||
) |
std::istream& Qrack::operator>> | ( | std::istream & | is, |
const QStabilizerPtr | s | ||
) |
std::istream& Qrack::operator>> | ( | std::istream & | is, |
const QUnitCliffordPtr | s | ||
) |
std::istream & Qrack::operator>> | ( | std::istream & | os, |
QCircuitGatePtr & | g | ||
) |
std::istream & Qrack::operator>> | ( | std::istream & | os, |
QCircuitPtr & | g | ||
) |
|
inline |
|
inline |
bitCapInt Qrack::pushApartBits | ( | const bitCapInt & | perm, |
const std::vector< bitCapInt > & | skipPowers | ||
) |
Qrack::REG_GATE_1 | ( | H | ) |
Apply Hadamard gate to each bit in "length," starting from bit index "start".
void Qrack::reverse | ( | BidirectionalIterator | first, |
BidirectionalIterator | last, | ||
bitCapInt | stride | ||
) |
void Qrack::rotate | ( | BidirectionalIterator | first, |
BidirectionalIterator | middle, | ||
BidirectionalIterator | last, | ||
bitCapInt | stride | ||
) |
|
inline |
const real1_f Qrack::_qrack_qbdt_sep_thresh = FP_NORM_EPSILON |
QRACK_CONST complex Qrack::C_SQRT1_2 = complex(SQRT1_2_R1, ZERO_R1) |
QRACK_CONST complex Qrack::C_SQRT1_2_NEG = complex(-SQRT1_2_R1, ZERO_R1) |
QRACK_CONST complex Qrack::C_SQRT_I = complex(SQRT1_2_R1, SQRT1_2_R1) |
QRACK_CONST complex Qrack::C_SQRT_N_I = complex(SQRT1_2_R1, -SQRT1_2_R1) |
QRACK_CONST complex Qrack::CMPLX_DEFAULT_ARG = complex(REAL1_DEFAULT_ARG, REAL1_DEFAULT_ARG) |
QRACK_CONST real1 Qrack::FP_NORM_EPSILON = std::numeric_limits<real1>::epsilon() |
QRACK_CONST complex Qrack::I_CMPLX = complex(ZERO_R1, ONE_R1) |
QRACK_CONST complex Qrack::I_CMPLX_NEG = complex(ZERO_R1, -ONE_R1) |
|
constexpr |
QRACK_CONST complex Qrack::ONE_CMPLX = complex(ONE_R1, ZERO_R1) |
|
constexpr |
|
static |
|
static |
QRACK_CONST real1_f Qrack::TRYDECOMPOSE_EPSILON = (real1_f)(8 * FP_NORM_EPSILON) |
QRACK_CONST complex Qrack::ZERO_CMPLX = complex(ZERO_R1, ZERO_R1) |
|
constexpr |