Ինչպես կատարել լողացող կետի մաթեմատիկա Linux Bash սցենարներում


Երբ բավականաչափ մոտը բավարար չէ, ձեզ անհրաժեշտ են լողացող կետով թվեր:

Հիմնական Takeaways

  • Linux Bash shell-ն աջակցում է միայն ամբողջ թվերի թվաբանությանը և չի կարող հաշվարկներ կատարել լողացող կետով թվերի վրա:
  • Bc ծրագիրը Linux-ում թույլ է տալիս ճշգրիտ լողացող կետի հաշվարկներ կատարել ինտերակտիվ և shell սկրիպտներում:
  • Օգտագործելով bc-ը, դուք կարող եք սահմանել տասնորդական վայրերի թիվը կամայական ճշգրտությամբ ցուցադրելու և հաշվարկներ կատարելու համար, ներառյալ՝ օգտագործելով ստանդարտ մաթեմատիկական գրադարանի գործառույթները:

Linux Bash shell-ն աջակցում է միայն ամբողջ թվերի թվաբանությանը: Այն ոչ կարող է հասկանալ, ոչ էլ հաղթահարել լողացող կետի հաշվարկները: Bc կոմունալը ձեզ հնարավորություն է տալիս ճշգրիտ լողացող կետի հաշվարկներ ինտերակտիվ և shell սկրիպտներով:

Ինչու Bash-ն աջակցում է միայն ամբողջ թվերին

Բնօրինակ դիզայնի որոշումը՝ սահմանափակելու UnixBourne թաղանթը ամբողջ թվով թվաբանականով կարող է արմատավորված լինել ամբողջ թվի վաղ հաշվարկային քարտեզագրմամբ մեկ բայթ RAM-ի վրա: Մենք երբեք չենք կարող իմանալ, թե իրականում ինչ է կանգնած այդ որոշման հետևում: Ոչ էլ, այդ դեպքում, ինչու Bourne shell-ի Linux տարբերակը՝ Bash shell-ը, որոշեց հետևել օրինակին:

Ինքնուրույն Bash-ը չի կարող հաշվարկներ կատարել լողացող կետով թվերի վրա, և այն ամբողջ թվերի վրա հաշվարկները, որոնք պատասխանի կոտորակային մաս կունենան, հաղորդվում են որպես կտրված ամբողջ արժեքներ: Սա ճիշտ է հրամանի տողում և Bash shell սցենարներում: Կախված ձեր օգտագործման դեպքից, դա կարող է լինել խնդրահարույց կամ ցուցադրական:

Linux-ը գալիս է երկու օգտակար հավելվածներով, որոնք թույլ են տալիս կատարել լողացող կետի հաշվարկներ: Դրանցից մեկը DC-ն է: Դա մի փոքր տարօրինակ է, որը գործում է այնպես, ինչպես գործում է հակադարձ լեհական նշումով: Մյուս գործիքը մ.թ.ա. Այն կարող է օգտագործվել ինտերակտիվ կամ որպես հրաման, և դա լուծումն է, որը մենք կքննարկենք այստեղ:

Կապված. 9 Bash սցենարի օրինակներ

Խնդիրը

Եկեք հասցնենք, որ Բաշը վեցը բաժանի երեքի:

echo $((6 / 3))

Մենք ստանում ենք երկուսի մեր ակնկալվող պատասխանը: Հիմա վեցը բաժանենք յոթի։ Ակնհայտ է, որ դա կունենա կոտորակային պատասխան:

echo $((6 / 7))

Զրոն ակնհայտորեն սխալ է: Փորձենք նորից՝ 16-ը բաժանելով 7-ի։

echo $((16 / 7))

Մենք ստանում ենք երկուսի պատասխան. Ինչ է տեղի ունենում, պատասխանի կոտորակային մասը հեռացվում է, ուստի պատասխանը կտրված է: Առաջին օրինակում կոտորակային մաս չկար, ուստի մենք ստանում ենք ճիշտ պատասխանը:

Երկրորդ օրինակը պատասխանում չուներ ամբողջական տարր, միայն կոտորակային մաս: Քանի որ կոտորակային մասը հանվել է, մեզ ցույց տրված պատասխանը զրո է:

Երրորդ օրինակում 7-ը երկու անգամ բաժանվում է 16-ի՝ կոտորակային մնացորդով։ Կրկին, մնացածը թափվում է, և արդյունքը կտրվում է:

bc-ի ինտերակտիվ օգտագործումը

Դուք կարող եք bc-ն օգտագործել որպես ինտերակտիվ հաշվիչ՝ մուտքագրելով bc և սեղմելով «Enter» ստեղնը:

bc

Bc հավելվածը գործարկվում է, հայտարարում է իր տարբերակի համարը և այնուհետև սպասում ձեր մուտքագրմանը: Հաշվարկ մուտքագրելով և «Enter» սեղմելով՝ bc-ն գնահատում է հաշվարկը և ցուցադրում պատասխանը:

16 * 4
1024 / 32
2^2 * 1024

Դուք կարող եք օգտագործել «Ctrl+L»՝ էկրանը մաքրելու համար, իսկ «Ctrl+D»՝ ծրագրից դուրս գալու համար: Փորձենք մի հաշվարկ, որը պատասխանում կունենա կոտորակային բաղադրիչ:

22 / 7

Դա այն չէ, ինչ մենք սպասում էինք: Հակադարձաբար, չնայած bc-ն մեզ թույլ է տալիս կամայական ճշգրտություն օգտագործել, լռելյայն այն չի ցուցադրի տասնորդական կետը կամ դրան հաջորդող որևէ թվեր:

Ճշմարիտ պատասխանը տեսանելի դարձնելու համար մենք պետք է նշենք, թե քանի տասնորդական տեղ պետք է ցուցադրվի: Մենք դա անում ենք «scale» հրամանով: Մենք կպահանջենք յոթ տասնորդական թվեր և նորից կանենք մեր հաշվարկը:

scale=7
22 / 7

Ի վերջո, մենք ինչ-որ տեղ ենք հասնում: «Սանդղակի» պարամետրը մնում է տեղում, քանի դեռ չեք փոխել այն: Տասնորդական տեղերի թիվը սահմանելը bc-ին ցույց է տալիս ցուցադրվող վայրերի առավելագույն թիվը: Եթե պատասխանին այդքան տասնորդական թվեր պետք չեն, այն ցուցադրվում է պահանջվող տասնորդական թվերով և ոչ ավելին: Այն չի լցվում անիմաստ զրոներով:

scale=10
0.300003 * 0.5

Միևնույն տողում կարող եք թվարկել տարբեր հաշվարկներ՝ օգտագործելով «;» ստորակետը: դրանք առանձնացնելու համար։ Պատասխանները ցուցադրվում են յուրաքանչյուր տողի վրա, ինչպես միշտ, հաշվարկների թվարկված հերթականությամբ:

25 * 6; 12.5 + 45.001; 3 + 5 + 7 + 9

Ցանկում կարող եք ներառել նաև «scale» հրամանը:

scale=8; 22 / 7; scale=3; 0.3 * 0.071

Ստանդարտ մաթեմատիկական գրադարան

-l (ստանդարտ մաթեմատիկական գրադարան) տարբերակը ստիպում է bc-ին բեռնել մի շարք ֆունկցիաներ և սահմանում է «սանդղակը» 20 տասնորդական թվերի:

bc -l
22 / 7

Բեռնված ստանդարտ գրադարանի դեպքում դուք կարող եք օգտագործել այս գործառույթները ձեր հաշվարկներում:

  • s (x). x-ի սինուսը
  • c (x). x-ի կոսինուսը:
  • a (x). x-ի արկտանգենսը
  • l (x). x-ի բնական լոգարիթմը
  • e (x). e-ի ցուցիչը x արժեքին
  • j (n,x). x-ի n ամբողջ կարգի Բեսելի ֆունկցիան:

Սինուսը, կոսինուսը և արկտանգենսը օգտագործում են ռադիանի արժեքներ:

s (1.1)
 
c (.891207)
 
a (.628473)

Մուտքագրման ուղարկում bc-ին հրամանի տողում

Դուք կարող եք օգտագործել վերահղումը և խողովակները՝ մուտքագրումը bc-ին ուղարկելու համար: Այն մշակում է ձեր մուտքագրումը և պատասխանը ցուցադրում տերմինալի պատուհանում:

Դուք կարող եք վերահղում դեպի bc՝ -l (ստանդարտ մաթեմատիկական գրադարան) տարբերակով կամ առանց դրա:

bc <<< 22/7
bc -l <<< 22/7

bc մուտքագրման համար մուտքագրումը պետք է լինի մեկ այլ գործընթացի արդյունք: Դրա համար հարմար է օգտագործել արձագանքը:

echo 22/7 | bc
echo 22/7 | bc -l

Եթե ձեր մուտքագրման մեջ բացատներ ունեք, կամ ցանկանում եք ներառել «մասշտաբ» հրամանը, ձեր մուտքագրումը փաթեթավորեք չակերտներով:

echo "22 / 7" | bc -l
echo "scale=6; 22 / 7" | bc

Bc-ի օգտագործումը Bash Shell սցենարներում

Այժմ մենք ունենք այն ամենը, ինչ անհրաժեշտ է, որպեսզի կարողանանք կատարել լողացող կետի հաշվարկներ մեր bash սկրիպտներում՝ մեր ընտրած ճշգրտությամբ: Մենք կարող ենք նաև հղում կատարել Bash փոփոխականներին մեր հաշվարկներում, ներառյալ սկրիպտի պարամետրերը:

Ահա մեր օրինակի սցենարը: Պատճենեք այս տեքստը խմբագրիչի մեջ, պահեք այն որպես «pi.sh», ապա փակեք ձեր խմբագրիչը:

#!/bin/bash
first_number=22
second_number=7
pi=$(echo "scale=$1; $first_number/$second_number" | bc)
echo "Pi to $1 decimal places is: $pi"

Երկու թվային արժեք պահելու համար մենք օգտագործում ենք երկու փոփոխական՝ «first_number» և «second_number»: Մենք օգտագործում ենք այդ փոփոխականները մուտքագրման մեջ, որը մենք խողովակավորում ենք bc.

Մենք նաև օգտագործել ենք առաջին հրամանի տողի պարամետրը, որը փոխանցվել է սկրիպտին՝ «$1», որպես «մասշտաբ» սահմանելու արժեք:

Նախքան մենք կարող ենք փորձել մեր սցենարը, մենք պետք է այն կատարելի դարձնենք chmod-ով:

chmod +x pi.sh

Եկեք փորձենք մեր սցենարը հրամանի տողի տարբեր արժեքներով:

./pi.sh 5
./pi.sh 14
./pi.sh 20

Մենք ստանում ենք pi-ն ցուցադրվում է մեր սցենարի հրամանի տողում նշված վայրերի քանակով:

Առնչվող. Ինչպես օգտագործել getopts-ը Linux Shell սցենարի ընտրանքները վերլուծելու համար

Ամեն ինչ ավելանում է

Բաշի միայն ամբողջ թվով մաթեմատիկայի սահմաններից դուրս անցնելը մեր սցենարներին տալիս է ճշգրտություն և ճշգրտություն:

Օգտագործելով echo to խողովակ մուտքագրումը bc սկրիպտների ներսում մի փոքր դժվար է, բայց այն հիանալի աշխատում է, և օգուտներն արժե այն: