commit cc71a1af48aeaea4502aaa0592c413e4b964faba (tree)
parent 88fb44e1fe6175526f3571dbe3b370f09489ccdb
Author: Christophe Delage <christ@ophe.net>
Date: Thu, 28 May 2026 21:39:43 +0200
testing near x = 1 and fixup accuracy claims
Diffstat:
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/lib/compiler_rt/log.zig b/lib/compiler_rt/log.zig
@@ -448,7 +448,7 @@ pub fn __logx(a: f80) callconv(.c) f80 {
/// <= 0.5 ulp: 99.99%, worst case <= 0.530 ulp
///
/// Accuracy on 10 million random numbers near x = 1 (testing the proc2 case):
-/// <= 0.5 ulp: 99.85%, worst case <= 0.532 ulp
+/// <= 0.5 ulp: 99.96%, worst case <= 0.528 ulp
pub fn logq(x: f128) callconv(.c) f128 {
const bitsize = 7;
const size = 1 << bitsize;
@@ -806,4 +806,10 @@ test "logq() sanity" {
try expectEqual(logq(1.200355637363589375e14), 3.2418809179272977400408325788186897e1);
try expectEqual(logq(6.6145398293682003021240234375e9), 2.261253606737223221601998075023261e1);
try expectEqual(logq(5.16179116383965741056e20), 4.7692985503915646405875629300054525e1);
+ // testing near 1
+ try expectEqual(logq(1.026586845186097528392910049888087e0), 2.6239557099466251374193777672800004e-2);
+ try expectEqual(logq(9.878220373715243107115568932385941e-1), -1.2252721576456821219120474521538944e-2);
+ try expectEqual(logq(9.417921077517196685541245315675951e-1), -5.997072116986790367958922503195352e-2);
+ try expectEqual(logq(1.043095786320424537962914257605007e0), 4.219300911769055080390811808602425e-2);
+ try expectEqual(logq(1.019043049323190694932517175175235e0), 1.8863999985309781522599012445793722e-2);
}
diff --git a/lib/compiler_rt/log2.zig b/lib/compiler_rt/log2.zig
@@ -174,7 +174,7 @@ pub fn __log2x(a: f80) callconv(.c) f80 {
/// <= 0.5 ulp: 99.99%, worst case <= 0.594 ulp
///
/// Accuracy on 10 million random numbers near x = 1 (testing the proc2 case):
-/// <= 0.5 ulp: 99.79%, worst case <= 0.605 ulp
+/// <= 0.5 ulp: 99.86%, worst case <= 0.546 ulp
pub fn log2q(x: f128) callconv(.c) f128 {
const bitsize = 7;
const size = 1 << bitsize;
@@ -509,4 +509,10 @@ test "log2q() sanity" {
try expectEqual(log2q(1.9179565888043380306021427656243352e-24), -7.878670421065570557450089031998522e1);
try expectEqual(log2q(2.5260048200126556877075044745936796e-25), -8.17113449801679676275805009400338e1);
try expectEqual(log2q(3.1170134002568967640399932861328125e7), 2.489366102143423848582774267206741e1);
+ // test near 1
+ try expectEqual(log2q(1.026586845186097528392910049888087e0), 3.7855678902522753591699367969189364e-2);
+ try expectEqual(log2q(1.0005582850578053877743656130405725e0), 8.052103367568488432896147152682078e-4);
+ try expectEqual(log2q(1.0370174103591254835765589348284266e0), 5.244011558596899945639244281954306e-2);
+ try expectEqual(log2q(1.0429996503525671713075162472250667e0), 6.073867421942172944687194557176633e-2);
+ try expectEqual(log2q(1.0383384027961064621892184334228659e0), 5.4276706191956281784022630732940314e-2);
}