คำตอบ:
dc
bc
เป็นเครื่องมือที่เก่ามากและค่อนข้างเก่ากว่า หากต้องการอ้างอิงหน้า Wikipedia :
มันเป็นหนึ่งในยูทิลิตี้ที่เก่าแก่ที่สุดของระบบปฏิบัติการยูนิกซ์ที่มีมาก่อนแม้กระทั่งการประดิษฐ์ภาษาซี เช่นเดียวกับโปรแกรมอรรถประโยชน์อื่น ๆ ของเหล้าองุ่นนั้นมันมีชุดคุณสมบัติที่ทรงพลัง แต่มีไวยากรณ์ที่สั้นมาก
ไวยากรณ์เป็นสัญกรณ์ขัดกลับซึ่งโดยทั่วไปหมายความว่าข้อโต้แย้ง (เช่นตัวเลข) มาก่อนตามด้วยโอเปอเรเตอร์ ตัวอย่างพื้นฐานของการdc
ใช้งานคือ:
echo '3 4 * p' | dc
ตำแหน่งที่p
จะต้องพิมพ์ผลลัพธ์ของการคำนวณ bc
ในทางตรงกันข้ามใช้สัญกรณ์มัดที่คุ้นเคยมากขึ้นและทำให้ง่ายต่อการใช้ นี่คือตัวอย่างbc
การใช้งาน:
echo '3 * 4' | bc
bc
เป็นมาตรฐานโดย POSIX และน่าจะเป็นแบบพกพาของทั้งสอง (อย่างน้อยในระบบที่ทันสมัย) หากคุณกำลังทำงานกับเครื่องคิดเลขด้วยตนเองมันเป็นทางเลือกที่แน่นอน (เว้นแต่คุณเป็นนักทำโทษตนเอง) dc
ยังสามารถใช้ประโยชน์ได้แม้ว่านี่เป็นกรณีที่สัญกรณ์ขัดกลับมีประโยชน์ ลองนึกภาพคุณมีโปรแกรมที่แสดงผลตัวเลขที่คุณต้องการรวมเช่น
23
7
90
74
29
ในการทำเช่นนี้dc
ทำได้ง่ายมาก (อย่างน้อยกับการใช้งานที่ทันสมัยซึ่งผู้ให้บริการแต่ละรายสามารถใช้ตัวเลขมากกว่าสองตัว) เนื่องจากคุณต้องต่อท้าย+p
กระแสข้อมูลเช่น:
{ gen_nums; echo +p } | dc
แต่เนื่องจากbc
มันมีความซับซ้อนมากขึ้นเนื่องจากเราไม่เพียง แต่ต้องใส่+
ระหว่างแต่ละหมายเลขและตรวจสอบให้แน่ใจว่าทุกอย่างอยู่ในบรรทัดเดียวกัน แต่ยังต้องแน่ใจว่ามีบรรทัดใหม่ในตอนท้าย:
{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
gen_nums
bc
สามารถลดความซับซ้อนลงได้:gen_nums | paste -sd+ | bc
bc
เป็นเพียงเครื่องมือส่วนหน้าที่รวบรวมbc
สัญกรณ์กับสัญกรณ์dc
และส่งไปdc
ยังเพื่อให้ได้ผลลัพธ์ บน FreeBSD ยังคงมีการ-c
ตั้งค่าสถานะbc
ซึ่งคุณยังสามารถรวบรวมdc
สัญกรณ์. For example
echo '3 * 4' | bc` echo '3 * 4' | bc -c | dc
เท่ากับ ดูlinux.die.net/man/1/bcและfreebsd.org/cgi/man.cgi?query=bc&sektion=1
dc
คุณกำลังใช้อะไรอยู่ บน Ubuntu 14.04 และ OS X +
ผู้ปฏิบัติงานจะทำงานกับค่าสองค่าที่แน่นอนเสมอ
bc -c
ทำบางสิ่งที่แปลกและแตกต่าง (และไม่มีการ-c
ตั้งค่าสถานะธง) ถ้าฉันพยายามที่จะใส่เข้าไปdc
ฉันได้รับข้อผิดพลาดมากมาย (และผลลัพธ์ที่ไม่มีการไพพ์dc
เป็นความลับ@iK3:K4:*W@r\n@i
)
ความแตกต่างขั้นพื้นฐานระหว่างสองคือdc
การนำมาใช้ประโยชน์โน้ตโปแลนด์ย้อนกลับ มันต้องมีคำสั่งที่ชัดเจนแม้ในการผลิตผลลัพธ์
คุณอาจเพิ่มจำนวนเต็มสองจำนวนbc
โดยพูดว่า:
bc <<< "2+4"
และมันจะผลิต6
บนบรรทัดด้วยตัวเอง อย่างไรก็ตามในที่dc
คุณจะต้องพูดว่า:
dc <<< "2 4 +p"
คุณยังสามารถทำสิ่งที่สนุกมากโดยใช้dc
เช่นดูคำตอบของฉันที่นี่เพื่อผลิต
Hello World!
dc
การใช้
dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P"
dc
เป็นเครื่องคิดเลขในขณะที่bc
เป็นภาษาจริง ดูหน้าคนของพวกเขา
ก่อนคริสต์ศักราชdc เป็นเครื่องคิดเลขแบบตั้งโต๊ะขัดเงาซึ่งรองรับการคำนวณทางคณิตศาสตร์ที่มีความแม่นยำไม่ จำกัด นอกจากนี้ยังช่วยให้คุณกำหนดและเรียกแมโครได้ ปกติ dc อ่านจากอินพุตมาตรฐาน ถ้าอาร์กิวเมนต์คำสั่งใด ๆ ถูกกำหนดให้มันเป็นชื่อไฟล์และ dc อ่านและดำเนินการเนื้อหาของไฟล์ก่อนที่จะอ่านจากอินพุตมาตรฐาน เอาต์พุตปกติทั้งหมดคือเอาต์พุตมาตรฐาน เอาต์พุตข้อผิดพลาดทั้งหมดคือข้อผิดพลาดมาตรฐาน
bc เป็นภาษาที่รองรับตัวเลขที่มีความแม่นยำตามอำเภอใจพร้อมการประมวลผลข้อความ มีความคล้ายคลึงกันบางอย่างในไวยากรณ์กับภาษาการเขียนโปรแกรม C ไลบรารีคณิตศาสตร์มาตรฐานพร้อมใช้งานโดยตัวเลือกบรรทัดคำสั่ง หากมีการร้องขอไลบรารีคณิตศาสตร์จะถูกกำหนดก่อนประมวลผลไฟล์ใด ๆ bc เริ่มต้นด้วยการประมวลผลรหัสจากไฟล์ทั้งหมดที่ระบุไว้ในบรรทัดคำสั่งในลำดับที่ระบุไว้ หลังจากประมวลผลไฟล์ทั้งหมดแล้ว bc จะอ่านจากอินพุตมาตรฐาน รหัสทั้งหมดจะถูกดำเนินการตามที่อ่าน (หากไฟล์มีคำสั่งเพื่อหยุดการประมวลผล bc จะไม่อ่านจากอินพุตมาตรฐาน)
มันขึ้นอยู่กับสิ่งที่คุณต้องการทำในที่สุด dc
การดำเนินงานบางอย่างจะไม่ไปได้โดยใช้ ฉันใช้ทั้งปีนอกเหนือจากเครื่องมือเครื่องคิดเลขบรรทัดคำสั่งอื่น ๆ ดู " ตัวแก้นิพจน์บรรทัดคำสั่ง? " สำหรับตัวอย่างเพิ่มเติม
dc
เป็นเครื่องคิดเลขสัญลักษณ์ขัดเงาย้อนกลับและเนื่องจากฉันเคยใช้เครื่องคิดเลขสัญกรณ์ขัดกลับ HP จริง ๆ แล้วฉันชอบที่dc
จะใช้bc
แต่ฉันจะบอกว่าทั้งคู่ยังคงใช้งานได้ทุกเมื่อที่คุณต้องทำการคำนวณทางคณิตศาสตร์ที่ซับซ้อน ฉันมักจะใช้พวกเขาเพื่อแปลงตัวเลข b / w ฐาน 10 เป็นฐาน 16 และฐาน 2 แต่ได้ใช้คอลัมน์เหล่านั้นนับเป็นคอลัมน์ในข้อมูลแบบตารางรวมทั้งจากภายในสคริปต์ AWK
bc
เป็นภาษาในแง่ที่ทำให้dc
มนุษย์เป็นมิตร - ไม่ใช่ว่ามันมีพลังมากกว่า วันนี้แอพพลิเคแบ่งปัน libs แต่bc
ถูกเรียกว่าภาษาและเครื่องคิดเลขเพราะไม่คณิตศาสตร์และพูดคณิตศาสตร์ - เพื่อ นี่คือที่เก่ากว่าหน้า : ภาษาที่เรียกว่า[1] ได้รับการพัฒนาที่รับโปรแกรมที่เขียนในภาษาระดับสูงและรวบรวมผลผลิตซึ่งถูกตีความโดย DC คำสั่งบางคำอธิบายด้านล่างนี้ได้รับการออกแบบมาสำหรับอินเทอร์เฟซคอมไพเลอร์และไม่ใช่เรื่องง่ายที่ผู้ใช้จะจัดการ dc
dc
bc
dc
man
BC
dc
เป็นภาษา เช่นcodegolf.stackexchange.com/a/47921/11259
ในความเห็นที่ต่ำต้อยของฉันและพูดให้น้อยที่สุด GNU dc นั้นแตกต่างจาก GNU bc ใน 3 วิธี:
1) ถ้าห้องสมุดคณิตศาสตร์ของ bc หมดความกังวลให้บันทึกการกดแป้นจำนวนมากที่สุดเท่าที่จะเป็นไปได้ (ในคำพูดของ Jan Łukasiewicz: สัญกรณ์ที่ไม่ต้องใช้วงเล็บ) เมื่อทำการคำนวณทางคณิตศาสตร์เบื้องต้นเพื่อสมาธิกับสิ่งจำเป็น
2) ในบรรทัดคำสั่งของ Microsoft Windows 7 GNU dc ใช้หน่วยความจำน้อยกว่า (~ 320K) กว่า GNU bc ทำ (~ 360K)
3) การควบคุมที่ละเอียดมากใน GNU dc มากกว่าใน GNU bc ตัวอย่างเช่นคำสั่ง stack และ register ไม่อยู่ใน GNU bc
รุ่น 1.07.1 win32 สำหรับทั้งคู่อยู่ที่https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
expr
บ่อยมากสำหรับการคำนวณอย่างง่าย ๆ บนบรรทัดคำสั่งและในสคริปต์