Skip to main content

Discriminant Data

Overview

Quadratic irrational discriminants are the core mathematical foundation of qiprng. The package includes carefully selected and validated discriminants that provide:
  • Proven randomness quality through extensive statistical testing
  • Optimal performance characteristics
  • Long periods suitable for large-scale simulations
  • Cryptographic security when combined with mixing functions

Loading Discriminant Data

# Load default excellent discriminants
discriminants <- load_excellent_discriminants()

# Load from custom file
custom_disc <- load_discriminants("path/to/discriminants.csv")

# Get recommended discriminants for specific use case
recommended <- get_recommended_discriminants(
  use_case = "cryptographic",
  min_period = 2^64
)

Discriminant Structure

Each discriminant entry contains:
# Example discriminant structure
list(
  discriminant = 163,        # Prime discriminant value
  a = "40.320...",          # Quadratic irrational coefficient a
  b = "1.0",                # Quadratic irrational coefficient b
  period_length = 2^63,      # Period before repetition
  validation_score = 0.994,  # Statistical quality score
  performance_rank = "A",    # Performance classification
  test_results = list(       # Detailed test results
    uniformity = 0.997,
    independence = 0.992,
    entropy = 0.995
  )
)

Quality Metrics

All discriminants are validated against:
MetricThresholdDescription
Uniformity> 0.99Distribution uniformity via KS test
Independence> 0.99Serial correlation tests
Entropy> 0.99Shannon entropy measure
Period> 2^48Minimum period length
NIST Tests> 0.98NIST SP 800-22 pass rate

Performance Classification

Discriminants are classified by performance:
  • Grade A: Optimal for high-frequency generation (> 500 MB/s)
  • Grade B: Good for general use (300-500 MB/s)
  • Grade C: Suitable for high-precision applications (< 300 MB/s)

Custom Discriminant Validation

# Validate custom discriminant
validation_result <- test_discriminant(
  discriminant = 197,
  num_samples = 1000000,
  test_suite = "comprehensive"
)

# Assess quality
quality <- assess_discriminant_quality(validation_result)
print(quality$summary)