pub(crate) static RERF_HARD: [[(u64, u64); 11]; 96]Expand description
Poly for x/erf(x) generated by Sollya and SageMath:
def build_sollya_script(idx):
return f"""
d = [{idx}/16, {idx + 1}/16];
f = x/erf(x);
Q = fpminimax(f, [|0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20|], [|107...|], d);
for i from 0 to degree(Q) by 2 do {{
write(coeff(Q, i)) >> "coefficients.txt";
write("\\n") >> "coefficients.txt";
}};
"""
def load_coefficients(filename):
with open(filename, "r") as f:
return [RealField(500)(line.strip()) for line in f if line.strip()]
def call_sollya_on_interval(idx):
sollya_script = build_sollya_script(idx)
with open("tmp_interval.sollya", "w") as f:
f.write(sollya_script)
import subprocess
if os.path.exists("coefficients.txt"):
os.remove("coefficients.txt")
try:
result = subprocess.run(
["sollya", "tmp_interval.sollya"],
check=True,
capture_output=True,
text=True
)
except subprocess.CalledProcessError as e:
return
def print_coeffs(poly):
print("[")
for i in range(len(poly)):
coeff = poly[i]
print_double_double("", coeff)
print("],")
print(f"pub(crate) static RERF_HARD: [[(u64, u64); 11]; 96] = [")
for i in range(0, 96):
call_sollya_on_interval(i)
coeffs = load_coefficients(f"coefficients.txt")
print_coeffs(coeffs)
print("];")