การดำเนินการลอยกับ bc?


42

ดูเหมือนว่า bc ไม่สนับสนุนการดำเนินการลอยเมื่อฉันecho 1/8 | bcได้รับฉันเป็นศูนย์

ฉันตรวจสอบbc (1)แล้ว แต่มันไม่ได้พูดถึงfloatดังนั้นฉันสงสัยว่ามันรองรับหรือไม่


9
echo "scale=4; 1/8" | bc
LiuYan 刘研

คำถามนี้และโดยเฉพาะคำตอบที่ยอมรับอาจเป็นที่สนใจของคุณ
Emanuel Berg

คำตอบ:


56

bcไม่ได้ทำทศนิยม แต่ทำทศนิยมแม่นยำ -lธง Hauke กล่าวโหลดห้องสมุดคณิตศาสตร์สำหรับเช่น ฟังก์ชั่นตรีโกณมิติ แต่มันก็หมายถึง

[ ... ] เริ่มต้นขนาดคือ 20

scaleเป็นหนึ่งใน "ตัวแปรพิเศษ" ที่กล่าวถึงในหน้า man คุณสามารถตั้งค่า:

scale=4

เมื่อใดก็ตามที่คุณต้องการ (ไม่ว่าจะ-lใช้หรือไม่ก็ตาม) มันหมายถึงจำนวนของตัวเลขที่สำคัญที่ใช้ในการทศนิยมที่ กล่าวอีกนัยหนึ่งการแก้ปัญหาที่ตามมาจะถูกปัดเศษเป็นจำนวนหลักนั้นหลังจากระดับทศนิยม (= ความแม่นยำคงที่)

สเกลเริ่มต้น-lคือ 0 หมายถึงปัดเศษเป็นจำนวนเต็ม


27

หน้าคนพูดว่า:

หาก bc ถูกเรียกใช้ด้วยอ็อพชัน -l ไลบรารีคณิตศาสตร์จะถูกโหลดไว้ล่วงหน้า [... ]

ความเข้าใจที่ดีขึ้นนั้นสามารถปรับปรุงได้จริง ๆ ...


14
รายงานว่าอัป
สตรีม

0

1) ตัวเลขใน bc มีสเกล สเกลของตัวเลขไม่ควรสับสนกับตัวคูณสเกล 'สเกล' ของโลกเดียวกันนั้นใช้เป็นฟังก์ชันในการค้นหาสเกลของตัวเลขหรือเป็นพารามิเตอร์เพื่อตั้งค่าตัวคูณสเกล

echo "scale=scale(1.1);11/10" | bc will return 1.1

2) ตัวประกอบสเกลกำหนดจำนวนตัวเลขที่ถูกเก็บไว้ทางด้านขวาของจุดทศนิยมเมื่อทำการดำเนินการ ถ้า s เป็นตัวประกอบสเกลปัจจุบัน sa คือสเกลของตัวถูกดำเนินการตัวแรก a, sb คือสเกลของตัวถูกดำเนินการที่สอง b ผลลัพธ์จะถูกตัดทอนดังนี้:

    scale of result
a+b     max(sa,sb)
a-b     max(sa,sb)
a*b     min(sa+sb , max(s,sa,sb))
a/b     s
a%b     so that a = b*quotient + remainder; remainder has sign of a
a^b     min(sa×|b|, max(s,sa)); b must be integer
sqrt(a) max(s,sa)

3) ที่จุดเริ่มต้น bc เป็นตัวประมวลผลล่วงหน้าของ dc ตอนนี้ในหลาย ๆ ระบบ bc เป็นโปรแกรมแบบสแตนด์อโลน

แหล่งที่มา: [ https://plan9.io/magic/man2html/1/dc]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.