Programowanie w systemie UNIX/ARB: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
m →‎Przykłady: arb_sqrt
Linia 65:
=Przykłady=
==arb_sqrt==
<source lang=c>
/*
 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
gcc s.c -larb -lflint -lgmp -lmpfr -lpthread -Wall
./a.out
 
-----------------
relative determinate error in the square root of Q is one half the relative determinate error in Q
 
IEEE-754 standard guarantees me that the result will be as close to the 'real result' as possible, i.e. error will be less than or equal to 1/2 unit-in-the-last-place. In particular,
http://stackoverflow.com/questions/22259537/guaranteed-precision-of-sqrt-function-in-c-c
=====================
decimal digits required = ceil(-log10(sqrt(x+1)-sqrt(x)))
http://stackoverflow.com/questions/30029410/sqrt-and-decimals
============
https://groups.google.com/forum/#!topic/flint-devel/yrOCnfi6DuI
 
*/
 
#include "arb.h"
 
 
int main()
{
slong prec;
slong dec_digits;
slong bits; // Returns the number of bits needed to represent the absolute value of the mantissa of the midpoint of x, i.e. the minimum precision sufficient to represent x exactly.
arb_t z; // arbitrary-precision floating-point numbers with ball arithmethic
slong i =0;
 
double z0 = 2.0;
 
arb_init(z);
prec = 64;
dec_digits = (prec-3)/3.3219280948873623;
arb_set_d(z, z0); // z = 2.0
bits = arb_bits(z);
while (1)
{
flint_printf("i = %3wd; prec = %10wd; bits = %10wd; dec_digits = %10wd; z = ", i, prec, bits, dec_digits);
arb_printn(z, dec_digits, 0);
flint_printf("\n");
//
arb_sqrt(z,z,prec);
bits = arb_bits(z); // Returns the number of bits needed to represent the absolute value of the mantissa of the midpoint of x, i.e. the minimum precision sufficient to represent x exactly.
//
prec += 1;
if (i>500) break;
dec_digits = (prec-3)/3.3219280948873623;
//
i+=1;
}
arb_clear(z);
flint_cleanup();
return 0;
}
</source>
 
 
Wynik :
 
<pre>
i = 0; prec = 64; bits = 1; dec_digits = 18; z = 2.00000000000000000
i = 1; prec = 65; bits = 62; dec_digits = 18; z = [1.41421356237309505 +/- 1.35e-18]
i = 2; prec = 66; bits = 64; dec_digits = 18; z = [1.18920711500272107 +/- 3.42e-18]
i = 3; prec = 67; bits = 66; dec_digits = 19; z = [1.090507732665257659 +/- 2.55e-19]
i = 4; prec = 68; bits = 67; dec_digits = 19; z = [1.044273782427413840 +/- 3.55e-19]
i = 5; prec = 69; bits = 67; dec_digits = 19; z = [1.021897148654116678 +/- 2.53e-19]
i = 6; prec = 70; bits = 69; dec_digits = 20; z = [1.0108892860517004600 +/- 3.05e-20]
i = 7; prec = 71; bits = 69; dec_digits = 20; z = [1.0054299011128028213 +/- 5.67e-20]
i = 8; prec = 72; bits = 71; dec_digits = 20; z = [1.0027112750502024854 +/- 3.42e-20]
i = 9; prec = 73; bits = 70; dec_digits = 21; z = [1.00135471989210820588 +/- 4.18e-21]
i = 10; prec = 74; bits = 73; dec_digits = 21; z = [1.00067713069306635668 +/- 4.70e-21]
i = 11; prec = 75; bits = 74; dec_digits = 21; z = [1.00033850805268231295 +/- 3.94e-21]
i = 12; prec = 76; bits = 75; dec_digits = 21; z = [1.00016923970530223108 +/- 4.01e-21]
i = 13; prec = 77; bits = 71; dec_digits = 22; z = [1.000084616272694313202 +/- 8.19e-22]
i = 14; prec = 78; bits = 75; dec_digits = 22; z = [1.000042307241395819339 +/- 3.56e-22]
i = 15; prec = 79; bits = 78; dec_digits = 22; z = [1.000021153396964808094 +/- 3.08e-22]
i = 16; prec = 80; bits = 72; dec_digits = 23; z = [1.0000105766425497202348 +/- 7.91e-23]
i = 17; prec = 81; bits = 76; dec_digits = 23; z = [1.0000052883072917631114 +/- 7.15e-23]
i = 18; prec = 82; bits = 81; dec_digits = 23; z = [1.0000026441501501165475 +/- 1.73e-23]
i = 19; prec = 83; bits = 82; dec_digits = 24; z = [1.0000013220742011181771 +/- 2.50e-23]
i = 20; prec = 84; bits = 83; dec_digits = 24; z = [1.00000066103688207420883 +/- 6.59e-24]
i = 21; prec = 85; bits = 84; dec_digits = 24; z = [1.00000033051838641590253 +/- 6.33e-24]
i = 22; prec = 86; bits = 85; dec_digits = 24; z = [1.00000016525917955265305 +/- 5.00e-24]
i = 23; prec = 87; bits = 86; dec_digits = 25; z = [1.000000082629586362502256 +/- 8.71e-25]
i = 24; prec = 88; bits = 87; dec_digits = 25; z = [1.000000041314792327795095 +/- 6.06e-25]
i = 25; prec = 89; bits = 87; dec_digits = 25; z = [1.000000020657395950533544 +/- 2.37e-25]
i = 26; prec = 90; bits = 89; dec_digits = 26; z = [1.000000010328697921925772 +/- 5.03e-25]
i = 27; prec = 91; bits = 87; dec_digits = 26; z = [1.0000000051643489476276358 +/- 7.99e-26]
i = 28; prec = 92; bits = 91; dec_digits = 26; z = [1.0000000025821744704800054 +/- 3.90e-26]
i = 29; prec = 93; bits = 87; dec_digits = 27; z = [1.0000000012910872344065496 +/- 4.35e-26]
i = 30; prec = 94; bits = 88; dec_digits = 27; z = [1.00000000064554361699491150 +/- 9.18e-27]
i = 31; prec = 95; bits = 89; dec_digits = 27; z = [1.00000000032277180844536493 +/- 4.50e-27]
i = 32; prec = 96; bits = 90; dec_digits = 27; z = [1.00000000016138590420965976 +/- 2.25e-27]
i = 33; prec = 97; bits = 91; dec_digits = 28; z = [1.000000000080692952101574204 +/- 8.87e-28]
i = 34; prec = 98; bits = 92; dec_digits = 28; z = [1.000000000040346476049973183 +/- 4.53e-28]
i = 35; prec = 99; bits = 92; dec_digits = 28; z = [1.000000000020173238024783112 +/- 4.99e-28]
i = 36; prec = 100; bits = 95; dec_digits = 29; z = [1.000000000010086619012340686 +/- 1.95e-28]
i = 37; prec = 101; bits = 97; dec_digits = 29; z = [1.0000000000050433095061576255 +/- 8.41e-29]
i = 38; prec = 102; bits = 99; dec_digits = 29; z = [1.0000000000025216547530756334 +/- 6.42e-29]
i = 39; prec = 103; bits = 101; dec_digits = 30; z = [1.0000000000012608273765370218 +/- 5.50e-29]
i = 40; prec = 104; bits = 103; dec_digits = 30; z = [1.00000000000063041368826831221 +/- 8.57e-30]
i = 41; prec = 105; bits = 104; dec_digits = 30; z = [1.00000000000031520684413410643 +/- 7.11e-30]
i = 42; prec = 106; bits = 105; dec_digits = 31; z = [1.00000000000015760342206704079 +/- 6.05e-30]
i = 43; prec = 107; bits = 106; dec_digits = 31; z = [1.00000000000007880171103351729 +/- 3.19e-30]
i = 44; prec = 108; bits = 107; dec_digits = 31; z = [1.000000000000039400855516757870 +/- 6.77e-31]
i = 45; prec = 109; bits = 107; dec_digits = 31; z = [1.000000000000019700427758378741 +/- 3.99e-31]
i = 46; prec = 110; bits = 108; dec_digits = 32; z = [1.000000000000009850213879189322 +/- 2.18e-31]
i = 47; prec = 111; bits = 109; dec_digits = 32; z = [1.000000000000004925106939594649 +/- 2.39e-31]
i = 48; prec = 112; bits = 110; dec_digits = 32; z = [1.0000000000000024625534697973214 +/- 5.24e-32]
i = 49; prec = 113; bits = 111; dec_digits = 33; z = [1.0000000000000012312767348986599 +/- 5.27e-32]
i = 50; prec = 114; bits = 112; dec_digits = 33; z = [1.0000000000000006156383674493298 +/- 3.21e-32]
i = 51; prec = 115; bits = 113; dec_digits = 33; z = [1.00000000000000030781918372466484 +/- 6.23e-33]
i = 52; prec = 116; bits = 113; dec_digits = 34; z = [1.00000000000000015390959186233241 +/- 3.64e-33]
i = 53; prec = 117; bits = 116; dec_digits = 34; z = [1.00000000000000007695479593116620 +/- 2.73e-33]
i = 54; prec = 118; bits = 117; dec_digits = 34; z = [1.000000000000000038477397965583100 +/- 6.60e-34]
i = 55; prec = 119; bits = 116; dec_digits = 34; z = [1.000000000000000019238698982791550 +/- 5.23e-34]
i = 56; prec = 120; bits = 117; dec_digits = 35; z = [1.000000000000000009619349491395775 +/- 3.13e-34]
i = 57; prec = 121; bits = 118; dec_digits = 35; z = [1.000000000000000004809674745697887 +/- 5.01e-34]
i = 58; prec = 122; bits = 116; dec_digits = 35; z = [1.0000000000000000024048373728489437 +/- 4.78e-35]
i = 59; prec = 123; bits = 121; dec_digits = 36; z = [1.0000000000000000012024186864244719 +/- 7.05e-35]
i = 60; prec = 124; bits = 123; dec_digits = 36; z = [1.0000000000000000006012093432122359 +/- 3.68e-35]
i = 61; prec = 125; bits = 122; dec_digits = 36; z = [1.00000000000000000030060467160611796 +/- 8.38e-36]
i = 62; prec = 126; bits = 125; dec_digits = 37; z = [1.00000000000000000015030233580305898 +/- 4.19e-36]
i = 63; prec = 127; bits = 125; dec_digits = 37; z = [1.00000000000000000007515116790152949 +/- 2.10e-36]
i = 64; prec = 128; bits = 127; dec_digits = 37; z = [1.00000000000000000003757558395076475 +/- 5.45e-36]
i = 65; prec = 129; bits = 125; dec_digits = 37; z = [1.000000000000000000018787791975382373 +/- 7.34e-37]
i = 66; prec = 130; bits = 129; dec_digits = 38; z = [1.000000000000000000009393895987691186 +/- 5.12e-37]
i = 67; prec = 131; bits = 129; dec_digits = 38; z = [1.000000000000000000004696947993845593 +/- 2.56e-37]
i = 68; prec = 132; bits = 131; dec_digits = 38; z = [1.0000000000000000000023484739969227966 +/- 7.12e-38]
i = 69; prec = 133; bits = 130; dec_digits = 39; z = [1.0000000000000000000011742369984613983 +/- 3.63e-38]
i = 70; prec = 134; bits = 133; dec_digits = 39; z = [1.0000000000000000000005871184992306991 +/- 5.70e-38]
i = 71; prec = 135; bits = 133; dec_digits = 39; z = [1.00000000000000000000029355924961534957 +/- 8.50e-39]
i = 72; prec = 136; bits = 135; dec_digits = 40; z = [1.00000000000000000000014677962480767479 +/- 7.32e-39]
i = 73; prec = 137; bits = 132; dec_digits = 40; z = [1.00000000000000000000007338981240383739 +/- 4.63e-39]
i = 74; prec = 138; bits = 137; dec_digits = 40; z = [1.00000000000000000000003669490620191870 +/- 4.38e-39]
i = 75; prec = 139; bits = 137; dec_digits = 40; z = [1.000000000000000000000018347453100959348 +/- 6.56e-40]
i = 76; prec = 140; bits = 139; dec_digits = 41; z = [1.000000000000000000000009173726550479674 +/- 3.28e-40]
i = 77; prec = 141; bits = 138; dec_digits = 41; z = [1.000000000000000000000004586863275239837 +/- 1.64e-40]
i = 78; prec = 142; bits = 141; dec_digits = 41; z = [1.0000000000000000000000022934316376199185 +/- 8.20e-41]
i = 79; prec = 143; bits = 141; dec_digits = 42; z = [1.0000000000000000000000011467158188099593 +/- 6.53e-41]
i = 80; prec = 144; bits = 143; dec_digits = 42; z = [1.0000000000000000000000005733579094049796 +/- 4.55e-41]
i = 81; prec = 145; bits = 141; dec_digits = 42; z = [1.0000000000000000000000002866789547024898 +/- 2.28e-41]
i = 82; prec = 146; bits = 145; dec_digits = 43; z = [1.00000000000000000000000014333947735124491 +/- 5.93e-42]
i = 83; prec = 147; bits = 145; dec_digits = 43; z = [1.00000000000000000000000007166973867562245 +/- 5.69e-42]
i = 84; prec = 148; bits = 147; dec_digits = 43; z = [1.00000000000000000000000003583486933781123 +/- 4.03e-42]
i = 85; prec = 149; bits = 146; dec_digits = 43; z = [1.000000000000000000000000017917434668905613 +/- 9.22e-43]
i = 86; prec = 150; bits = 149; dec_digits = 44; z = [1.000000000000000000000000008958717334452807 +/- 5.18e-43]
i = 87; prec = 151; bits = 149; dec_digits = 44; z = [1.000000000000000000000000004479358667226403 +/- 4.81e-43]
i = 88; prec = 152; bits = 151; dec_digits = 44; z = [1.0000000000000000000000000022396793336132017 +/- 8.23e-44]
i = 89; prec = 153; bits = 146; dec_digits = 45; z = [1.0000000000000000000000000011198396668066008 +/- 7.02e-44]
i = 90; prec = 154; bits = 153; dec_digits = 45; z = [1.0000000000000000000000000005599198334033004 +/- 3.51e-44]
i = 91; prec = 155; bits = 153; dec_digits = 45; z = [1.00000000000000000000000000027995991670165021 +/- 8.32e-45]
i = 92; prec = 156; bits = 155; dec_digits = 46; z = [1.00000000000000000000000000013997995835082510 +/- 8.77e-45]
i = 93; prec = 157; bits = 154; dec_digits = 46; z = [1.00000000000000000000000000006998997917541255 +/- 4.39e-45]
i = 94; prec = 158; bits = 157; dec_digits = 46; z = [1.00000000000000000000000000003499498958770628 +/- 4.86e-45]
i = 95; prec = 159; bits = 157; dec_digits = 46; z = [1.000000000000000000000000000017497494793853138 +/- 5.96e-46]
i = 96; prec = 160; bits = 159; dec_digits = 47; z = [1.000000000000000000000000000008748747396926569 +/- 2.98e-46]
i = 97; prec = 161; bits = 157; dec_digits = 47; z = [1.000000000000000000000000000004374373698463285 +/- 6.16e-46]
i = 98; prec = 162; bits = 161; dec_digits = 47; z = [1.000000000000000000000000000002187186849231642 +/- 3.25e-46]
i = 99; prec = 163; bits = 161; dec_digits = 48; z = [1.0000000000000000000000000000010935934246158211 +/- 6.23e-47]
i = 100; prec = 164; bits = 163; dec_digits = 48; z = [1.0000000000000000000000000000005467967123079106 +/- 5.30e-47]
</pre>
 
Porównaj z:
* [[C/sqrt|sqrt]]
 
==pi==