Skip to content

KleinInvariantJ ​

Klein's absolute invariant J(τ)=j(τ)/1728J(\tau) = j(\tau)/1728, normalised so J(i)=1J(i) = 1 and J(ρ)=0J(\rho) = 0 at the elliptic points. A thin wrapper over this package's own ModularJ (the un-normalised jj).

✓ checked against that system · ! checked, with disagreements (hover a chip)Wolfram LanguageKleinInvariantJ!
KleinInvariantJ(tau)J(τ)=j(τ)/1728J(\tau) = j(\tau)/1728.
Typed signatures
TypePackageApplies
(number) -> numberanalyticalways

Domain: Special functions

Details
  • All the analytic work — fundamental-domain reduction, the η24\eta^{24} discriminant — is ModularJ's; this only rescales.
  • τ=i\tau = i is returned exactly (1): j(i)=1728j(i) = 1728 is a textbook identity, kept exact even under plain evaluate(), not just N().

Examples

1 more kept as data, checked against the oracles
Basic #

J(i)=1J(i) = 1

live ↗
InN(KleinInvariantJ(i))N(\mathrm{KleinInvariantJ}(i))Out1.01.0

Known value · Wolfram 15.0.0 KleinInvariantJ

J(2i)=663/1728=1331/8J(2i) = 66^3/1728 = 1331/8

live ↗
InN(KleinInvariantJ(2i))N(\mathrm{KleinInvariantJ}(2i))Out166.375166.375

Known value · Wolfram 15.0.0 KleinInvariantJ

Scope #

Exact at the elliptic point ii

live ↗
InKleinInvariantJ(i)\mathrm{KleinInvariantJ}(i)Out11
Possible issues #

Re(τ) = π·10^22 spans far more than 10^6 periods of T (period 1): τ this far out has no reduction against the real period at double precision, so tauTooFarForDouble (modular.ts, atop periodsExceedDouble/tauTooCloseToRealAxis in ce-patches/support/precise.ts) declines rather than return a wrong value.

live ↗
InN(KleinInvariantJ(i+π×1022))N(\mathrm{KleinInvariantJ}(i+π×10^{22}))OutKleinInvariantJ(3.141 592 653 589 793 238 462 643⋅1022+i)\mathrm{KleinInvariantJ}(3.141\,592\,653\,589\,793\,238\,462\,643\cdot10^{22}+i)

The true value (mpmath kleinj, dps=30) — still not computed here. Reducing τ's fundamental-domain step at bignum precision before collapsing to a double is deferred; this example only pins the gap, not a fix.

live ↗

Known value · mpmath 1.3.0 kleinj

Neat examples #

Heegner number 163: J(1+i1632)=−6403203/1728=−151931373056000J\bigl(\tfrac{1+i\sqrt{163}}2\bigr) = -640320^3/1728 = -151931373056000; the double τ\tau already carries a relative error of 2−532^{-53}, which JJ magnifies by 2π Im τ≈402\pi\,\mathrm{Im}\,\tau \approx 40, so about 14 digits agree

live ↗
InN(KleinInvariantJ(12(1+1631/2i)))N(\mathrm{KleinInvariantJ}(\frac{1}{2}(1+163^{1/2}i)))Out−151 931 373 055 998.97-151\,931\,373\,055\,998.97
About
Examples7
Checked againstWolfram Language 5 agree1 differ
CrosswalkWolfram Language

Implementation

primitive · kernela kernel — an algorithm over mutable state that would not be readable as a tree

nativeenginetypescriptpackages/symbols/analysis/analytic/src/modular.ts

j(τ)/1728, delegating entirely to ModularJ.

See also: ModularJ, ModularLambda