Ինչպես կատարել լողացող կետի մաթեմատիկա 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-ն է: Դա մի փոքր տարօրինակ է, որը գործում է այնպես, ինչպես գործում է հակադարձ լեհական նշումով: Մյուս գործիքը մ.թ.ա. Այն կարող է օգտագործվել ինտերակտիվ կամ որպես հրաման, և դա լուծումն է, որը մենք կքննարկենք այստեղ:
Խնդիրը
Եկեք հասցնենք, որ Բաշը վեցը բաժանի երեքի:
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-ն ցուցադրվում է մեր սցենարի հրամանի տողում նշված վայրերի քանակով:
Ամեն ինչ ավելանում է
Բաշի միայն ամբողջ թվով մաթեմատիկայի սահմաններից դուրս անցնելը մեր սցենարներին տալիս է ճշգրտություն և ճշգրտություն:
Օգտագործելով echo to խողովակ մուտքագրումը bc սկրիպտների ներսում մի փոքր դժվար է, բայց այն հիանալի աշխատում է, և օգուտներն արժե այն: