Bc
Contents
Leg med bc
bc programmet er en avanceret regneprogram, som faktisk også har indbygget et programmeringssprog og som samtidig er forholdsvis nem at betjene.
Lidt leg med bc for at lære den at kende
Store tal
Hvor mange mulige IP addresser er der i IPv6 i forhold til IPv4.
- IPv4 - 32 bits adresser
- IPv6 - 128 bits adresser
[heth@mars ~]$ <input>bc</input>
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
<input>2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2</input>
4294967296
Puha det var mange gange jeg skulle skrive 2*2*2... 32 gange. Heldigvis kan vi opløfte i potenser
[heth@mars ~]$ <input>bc</input>
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
<input>2^32</input>
4294967296
For IPv6
[heth@mars ~]$ <input>bc</input>
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
<input>2^128</input>
340282366920938463463374607431768211456
Hvor mange mulige kombinationer af nøgler har 4096 bits kryptering
[heth@mars ~]$ <input>bc</input>
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
<input>2^4096</input>
10443888814131525066917527107166243825799642490473837803842334832839\
53907971557456848826811934997558340890106714439262837987573438185793\
60726323608785136527794595697654370999834036159013438371831442807001\
18559462263763188393977127456723346843445866174968079087058037040712\
84048740118609114467977783598029006686938976881787785946905630190260\
94059957945343282346930302669644305902501597239986771421554169383555\
98852914863182379144344967340878118726394964751001890413490084170616\
75093668333850551032972088269550769983616369411933015213796825837188\
09183365675122131849284636812555022599830041234478486259567449219461\
70238065059132456108257318353800876086221028342701976982023131690176\
78006675195485079921636419370285375124784014907159135459982790513399\
61155179427110683113409058427288427979155484978295432353451706522326\
90613949059876930021229633956877828789484406160074129456749198230505\
71642377154816321380631045902916136926708342856440730447899971901781\
46576347322385026725305989979599609079946920177462481771844986745565\
92501783290704731194331655508075682218465717463732968849128195203174\
57002440926616910874148385078411929804522981857338977648103126085903\
00130241346718972667321649151113160292078173803343609024380470834040\
3154190336
Det er jo et stort tal. Bemærk backslashen i linerne betyder at linien fortsætter.
Funktioner
bc kan anvendes til meget komplicerede beregninger. I eksemplet herunder beregnes PI med 10.000 decimaler. Tager lidt tid.
[heth@mars ~]$ <input>bc -l -q
scale = 10000
(12*a(1/49)+32*a(1/57)-5*a(1/239)+12*a(1/110443))*4</input>
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
45432664821339360726024914127372458700660631558817488152092096282925\
<notice>De næste 150 linier er udeladt</notice>
Andre talsystemer
bc kan anvende ethvert talsystem. For at lave et netværksfilter havde jeg brug for at omsætte min MAC-adresse som er hexadecimal til binært
[heth@mars ~]$ <input>bc</input>
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
<input>obase=2
ibase=16
0021869FC355</input>
10000110000110100111111100001101010101
<input>quit</input>
[heth@mars ~]$
Anvendelse af bc i scripts
Piping til bc
Fra script kunne hexadecimal til binær omregning som i sidste eksempel udføres som (Husk \n er nylinie tegnet)
[root@mars log]#<input>echo -e "obase=2\nibase=16\n0021869FC355" | bc</input>
10000110000110100111111100001101010101
[heth@mars ~]$ <input>echo "2^128" | bc</input>
340282366920938463463374607431768211456
[heth@mars ~]$
Factorial in bc
<input>define f(x) {
if (x>1) {
return (x * f (x-1))
}
return (1)
}
f(3)</input>
6
<input>f(128)</input>
38562048236258042173567706592346364061749310959022359027882840327637\
34025751655435606861685885073615340300518330589163475921729322624988\
57766114955245039357760034644709279247692495585280000000000000000000\
000000000000