Extension:BCmath/pl

From Linux Web Expert

Podręcznik rozszerzeń MediaWiki
BCmath
Status wydania: eksperymentalne
File:PI constant.svg
Realizacja API
Opis Provides arbitrary-precision arithmetic for Scribunto.
Autor(zy)
  • John Erling Blad (Jebladtalk)
Polityka zgodności Master maintains backward compatibility.
MediaWiki
Zmiany w bazie danych Nie
Licencja GNU General Public License 2.0 lub późniejsza
Pobieranie
README, LDoc
Quarterly downloads Lua error in Module:Extension at line 172: bad argument #1 to 'inNamespace' (unrecognized namespace name 'skin').
Public wikis using Lua error in Module:Extension at line 172: bad argument #1 to 'inNamespace' (unrecognized namespace name 'skin').
Translate the BCmath extension

BCmath provides arbitrary-precision arithmetic to Lua modules. With the lib from this extension it would be completely valid to do calculations on 𝜋 with 125 characters, 𝜋 ≅ 3,141 592 653 589 793 238 462 643 383 279 502 884 197 169 399 375 105 820 974 944 592 307 816 406 286 208 998 628 034 825 342 117 067 982 148 086 513 282 306 647 093 8… (Actually, the real 𝜋 is even infinitely much longer!)

The extension uses PHP BCMath Arbitrary Precision Mathematics api through use of phpseclib/bcmath_compat to access the bc programming language.

Expect depends on modules from the Scribunto extension.

  • <translate> <tvar name=1>Download</tvar> and place the file(s) in a directory called <tvar name=name>BCmath/pl</tvar> in your <tvar name=ext>extensions/</tvar> folder.</translate>
  • <translate> Add the following code at the bottom of your <tvar name=1>LocalSettings.php </tvar> file:</translate>
    wfLoadExtension( 'BCmath/pl' );
    
  • File:OOjs UI icon check-constructive.svg <translate> Done</translate> – <translate> Navigate to <tvar name=special>Special:Version</tvar> on your wiki to verify that the extension is successfully installed.</translate>

Usage

The workflow is to first define a BCmath instance, and then use that in ordinary equations, in chained operations, or as part of function calls. Existence of an instance in supported operations will trigger use of the special functions and methods.

-- Used for chained operations
local sum1 = mw.bcmath.new( 0.0 ):add( 42.0 )                   -- 42.000000000000000
local sum2 = mw.bcmath.new( '0' ):add( '42' )                   -- 42

-- Used in an equation
local sum3 = sum1 * sum2 + 3.14                                 -- 1767.140000000000000

-- Used in function calls
local sum4 = mw.bcmath.add( mw.bcmath.mul( sum1, sum2 ), 3.14 ) -- 1767.140000000000000
local str1 = sum4 'sci'                                         -- 1.767140000000000000e3
local str2 = sum4( 'sci', 4 )                                   -- 1.767e3

For further help, see the generated LDoc documentation.

Development

For recreating the Vagrant-based development environment, see BCmath: Manual/Vagrant.

Alternatives

The best and perhaps only real alternative is the decNumber C-library, which implements IEEE 754r, and the ldecNumber Lua wrapper library for interfacing with decNumber. These two must be used together.

The decNumber library should have a security audit before it is used, but it is probably safe. The Lua library is archived, and is hopelessly outdated with a last version (ldecNumber-21) from August 2007. There are no known MediaWiki-integration for decNumber/ldecNumber.

Zobacz też