From 47c773300a40adf66e59e83ca2492f87b7ccb57d Mon Sep 17 00:00:00 2001 From: PowerUser64 Date: Thu, 27 Nov 2025 00:31:33 -0800 Subject: [PATCH] feat(math): add `logb` function Closes #12112 --- CHANGELOG.rst | 4 ++++ doc_src/cmds/math.rst | 2 ++ src/tinyexpr.rs | 1 + tests/checks/math.fish | 15 +++++++++++++++ 4 files changed, 22 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 80e8dcc25..fc78be460 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -7,6 +7,10 @@ Notable improvements and fixes Deprecations and removed features --------------------------------- +Scripting improvements +---------------------- +- ``math`` gained a new ``logb`` function. + Interactive improvements ------------------------ - When typing immediately after starting fish, the first prompt is now rendered correctly. diff --git a/doc_src/cmds/math.rst b/doc_src/cmds/math.rst index 3fffcbe6b..4fc886a91 100644 --- a/doc_src/cmds/math.rst +++ b/doc_src/cmds/math.rst @@ -156,6 +156,8 @@ Functions the base-10 logarithm ``log2`` the base-2 logarithm +``logb(b,x)`` + returns the logarithm with base b of x ``max`` returns the largest of the given numbers - this takes an arbitrary number of arguments (but at least one) ``min`` diff --git a/src/tinyexpr.rs b/src/tinyexpr.rs index befb02240..13e8e08af 100644 --- a/src/tinyexpr.rs +++ b/src/tinyexpr.rs @@ -291,6 +291,7 @@ fn npr(n: f64, r: f64) -> f64 { (L!("log"), Function::Fn1(f64::log10)), (L!("log10"), Function::Fn1(f64::log10)), (L!("log2"), Function::Fn1(f64::log2)), + (L!("logb"), Function::Fn2(|base, x| x.log(base))), (L!("max"), Function::FnN(maximum)), (L!("min"), Function::FnN(minimum)), (L!("ncr"), Function::Fn2(ncr)), diff --git a/tests/checks/math.fish b/tests/checks/math.fish index cb2c4bec3..9da01e2fa 100644 --- a/tests/checks/math.fish +++ b/tests/checks/math.fish @@ -276,6 +276,21 @@ echo $status math 'log2(8)' # CHECK: 3 +math 'logb(2, 8)' +# CHECK: 3 +math 'logb(67, 406067677556641)' +# CHECK: 8 +math 'logb(42, 230539333248)' +# CHECK: 7 +math 'logb(12, 8916100448256)' +# CHECK: 12 +math 'logb(3, 5559060566555523)' +# CHECK: 33 +math 'logb(5, 2384185791015625)' +# CHECK: 22 +math 'logb(7, 343)' +# CHECK: 3 + # same as sin(cos(2 x pi)) math sin cos 2 x pi # CHECK: 0.841471