Math Processor Unit Library

libmpu – library of arithmetic functions for integer, real, and complex numbers of increased digit capacity

16 Commits   0 Branches   2 Tags
author: kx <kx@radix-linux.su> 2024-12-20 16:11:07 +0300 committer: kx <kx@radix-linux.su> 2024-12-20 16:11:07 +0300 commit: 868b2b66b564b5c00e3a74d10be45db7151627ac parent: cce2ae8d3312493b7653358bb4af201d3271377b
Commit Summary:
Version 1.0.14
Diffstat:
1 file changed, 86 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..73dfb3f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,132 @@
+
+# [Math Processor Unit Library (libmpu)](https://cgit.radix-linux.su/libs/libmpu.git/)
+
+**libmpu** is a library of arithmetic functions for integer, real, and complex numbers of increased digit capacity.
+
+## Limitations:
+
+Arithmetic functions up to **65536** bits.
+
+Trigonometric functions up to **16384** bits.
+
+
+## How to Build:
+
+Clone the repository:
+
+```Bash
+ git clone https://git.radix-linux.su/libs/libmpu.git libmpu
+```
+
+Bootstrap sources:
+
+```Bash
+ cd libmpu
+
+ ./bootstrap
+
+ cd ../
+```
+
+Build the **MPU** library:
+
+```Bash
+ mkdir build
+
+ cd build
+
+ ../libmpu/configure \
+   --prefix=/usr \
+   --libdir=/usr/lib64 \
+   --enable-static=no
+
+ make
+ make install
+
+ cd ../
+```
+
+## Usage:
+
+Create directory:
+
+```Bash
+ mkdir -p tests/atan2
+
+ cd tests/atan2
+```
+
+Create Makefile:
+
+```Makefile
+ CC = gcc
+
+ CFLAGS  = `mpu-config cflags`
+ LDFLAGS = `mpu-config --ldflags`
+ LIBS    = `mpu-config --libs` -lpthread
+
+ SOURCES = main.c
+ OBJECTS = main.o
+
+ all: main
+
+ .SUFFIXES:
+ .SUFFIXES: .o .c
+ %.o : %.c
+         $(CC) $(CFLAGS) -c -o $@ $<
+
+ main: $(OBJECTS)
+         $(CC) $(LDFLAGS) -o main $(OBJECTS) $(LIBS)
+
+ clean:
+         rm -f main *.o
+```
+
+Create simple source code (main.c):
+
+```C
+ #include <libmpu.h>
+ #include <stdio.h>
+
+ int main( void )
+ {
+   int  rc = 0;
+
+   __mpu_init();
+   __mpu_extra_warnings = 1;
+
+   {
+     mpu_real16384_t r, d;
+     int             nb = NB_R16384;
+     __mpu_char8_t   s[6000]; /* size can be obtained by _real_max_string( NB_R16384 ) function */
+
+     ascii_to_real( r, "1.0", nb ); /* evaluate the R variable */
+     ascii_to_real( d, "1.0", nb ); /* evaluate the D variable */
+
+     r_atan2( r, r, d, nb );     /* arc tangent function of R / D and place result to the R variable */
+     real_to_ascii( s, r, _real_mant_digs(nb), 'E', 0, 0, nb ); /* convert R value to ASCII string S */
+     printf( "s = %s\n\nrc = %d;\n", s, rc );
+   }
+
+   __mpu_free_context();
+
+   return( rc );
+ }
+```
+
+Build the **main** binary:
+
+```Bash
+ make
+```
+
+Run the **main** program:
+
+```Bash
+ ./main
+ s = 7.853981633974483096156608458198757210492923498437764552437361480769541015715522496570087063355292669955370216283205766617734611523876455579313398520321202793625710256754846302763899111557372387325954911072027439164833615321189120584466957913178004772864121417308650871526135816620533484018150622853184311467516515788970437203802302407073135229288410919731475900028326326372051166303460367379853779023582643175914398979882730465293454831529482762796370186155949906873918379714381812228069845457529872824584183406101641607715053487365988061842976755449652359256926348042940732941880961687046169173512830001420317863158902069464428356894474022934092946803671102253062383575366373963427626980699223147308855049890280322554902160086045399534074436928274901296768028374999995932445124877649329332040240796487561148638367270756606305770633361712588154827970427525007844596882216468833020953551542944172868258995633726071888671827898907159705884468984379894454644451330428067016532504819691527989773041050497345238143002663714658197164840383454569920575754880088254632422489434056498534728124304438208697828788937143106135376739877073832792154319639722687745954386593662348298137651002319254177847524622060032145904008909269150261775454857388990497366919593623620638449436817117760118836615520116710647673728233284192572472880261880405142415060145095375483778133456075088969100618741183159785498181510674806991955886954090023354304103049811465787575715457436389266874596263736471467317489227318026993773257388302913362468006889900591201663747799704586994383915924518566356319656379546043936682227444431984500204117650040363122980433043036930875353604933921370403402893381380333689354623671096308309768485358336369406042156297458923713905248048055460681375635642219179476236504133667012471568081979465214460959569919941703635252384709465902376700160562813012793482462240210321221567364010604913212555526652965766860696555097987362617809284467402390910929793218669411643934906034727164581614989533476195068975248664410197378173670995881489274564556551306223519316798695671206503692477256600340986093638262670508740631129373499128578574522976648127343054241153789274645968526494714899432438747325404384821170345671709672356935389979639813114884898577624931311702114968184111739621634591840556565247811520128109710976128110341374406951994289228589994250324040223604237171389621015883555180564571221620396140071265042106848630668669197238130346306374886666819559966141490290887215576443641245088984086420435810281287690173698627741490235063072199277232864172842168071872351400253758271544821702302186902294562346472524287274189963153413874454732824462054207497371806647012143910035676193887830949103628809365585911357146111988164669552627853386839348807783567915255339923840578607381212342967775364413508975699836009355018276446347655495968619521196224208303614284671879858766075546132977621202513426536701687298195477994849880153549158571886101609362809295480449995977539798904536687856728099372352267966235579903919863020237866375563079009704825355234405344639891597344467707597674480193366805456406499153753553757670096119336373006513536664813003743607126831296665005331085220476776215829336624128634764490671402513770266646992495408936840960131428647757242660350277428015701097599398789192894251050844674840018076396907940898554682812867801332320479565465314668303947996037122072911176523938176739305229391779180727745422728820043376678187145805717958802338491431280270894787842470522861052516877583667775785316777842477164629099578754925412877921292859414404587889127212274974649955968363820829088769119796339733065463724080332332724642660511688147677288703541374648654092950677454985774811222393928207226480808315243249280211083933163723455977983149365916826459010357034707580095622593974631093604257283191404523443361007676867302800478255082595049405275275112323303790210611214909417459738071711957808881645532862394214315608360473259921606560852693306744507018297288602752611705813179050263163068027915099166393273136777639463440866705163277474131729655141192328142646589155046395251823401649691215294776133372125865284144216883123604170099066449469296390211382413531663521326535861079646692437864153517001750594694147836004281873676051405576347486403285177817501019636833174847703636661614701993177066707658582146964245763089522332664393516988642909438135505287389403953500625315571485325541178877448148077476991368440313794141878393794574166136947936252824903722576159986783240526835109379739339903647254847428277947607445714118758007996728785071770214976200273530368053294869119431556035637136350830392963265355720343962607658304379574496655592930397901929173136871847466637373625286635157108415984475099423164180365963266840241428022951909581791604068722200196731400725571180260079302965205104750105741542799094480334393778739875391512407965736816368410631E-1
+
+ rc = 0;
+```
+
+**Enjoy**.