ทุกคนลืมปาสกาลหรือไม่
1/6
อัตราผลตอบแทน0.1666666...
(เพื่อความแม่นยำสิ่งที่ได้รับการสนับสนุน)
1 div 6
อัตราผลตอบแทน 0
สามารถพิสูจน์ได้ว่ากฎ C เป็นความผิดพลาดหรือไม่ ตัวดำเนินการทางคณิตศาสตร์ของ C เกือบทั้งหมดซึ่งตัวถูกดำเนินการเป็นชนิดเดียวกันให้ผลลัพธ์ของชนิดเดียวกัน มีบางอย่างที่ต้องพูดเพื่อความมั่นคง
นอกจากนี้เนื่องจาก C มีการกำหนดเป้าหมายไว้ที่รหัสระดับระบบเป็นหลักโปรแกรม C ส่วนใหญ่จึงไม่ใช้ floating-point เลย ในครั้งเดียวการเพิ่มรหัสจุดลอยตัวไปยังโปรแกรมที่ไม่ต้องการอย่างอื่นอาจเป็นปัญหาร้ายแรง อาจเป็นกรณีนี้สำหรับระบบฝังตัวขนาดเล็ก - ซึ่งอีกครั้งเป็นเป้าหมายสำคัญสำหรับ C.
ในโปรแกรม C ส่วนใหญ่การตัดทอนจำนวนเต็มอาจเป็นสิ่งที่คุณต้องการ
หากได้1 / 6
ผลลัพธ์เป็นจำนวนจุดลอยตัวเป็น C ดังนั้น:
- มันจะไม่สอดคล้องกันในภาษา
- มาตรฐานจะต้องให้เป็นตัวเลือกโดยพลการของซึ่งชนิดลอยจุดที่จะใช้สำหรับผลที่ได้ (
double
อาจดูเหมือนทางเลือกธรรมชาติ แต่คุณอาจต้องการความแม่นยำเป็นพิเศษlong double
)
- ภาษายังคงต้องมีการดำเนินการสำหรับการแบ่งจำนวนเต็ม ดำเนินการเพิ่มจุดลอยตัวแล้วตัดทอนน่าจะไม่ดีพอ
C อาจจัดให้มีโอเปอเรเตอร์แยกต่างหากสำหรับการแบ่งทั้งสองชนิด แต่ประเด็นที่สองข้างต้นจะยังคงใช้อยู่: ผลการคำนวณประเภทใดที่จะใช้กับจุดลอยตัวทั้งสามประเภท และเนื่องจากมันง่ายพอที่จะรับค่าทศนิยมถ้าคุณต้องการ (ใช้ค่าคงที่จุดลอยตัวสำหรับหนึ่งหรือทั้งสองตัวถูกดำเนินการหรือร่ายหนึ่งหรือทั้งสองของตัวถูกดำเนินการเป็นชนิดจุดลอย), เห็นได้ชัดว่าไม่ใช่ ไม่ถือว่าสำคัญ
ในคู่มือ C รุ่นปี 1974 (นั่นคือ 4 ปีก่อนการตีพิมพ์ฉบับพิมพ์ครั้งแรกของ K&R) Ritchie ไม่ได้พูดถึงความสับสนที่อาจเกิดขึ้น:
ไบนารี / โอเปอเรเตอร์บ่งชี้ถึงการหาร ข้อควรพิจารณาประเภทเดียวกันกับการคูณใช้
ที่บอกว่าถ้าทั้งสองตัวถูกดำเนินการเป็นประเภทint
หรือผลที่ได้คือประเภทchar
int
ใช่มันเป็นที่มาของความสับสนสำหรับโปรแกรมเมอร์ C โดยเฉพาะผู้เริ่มต้น - แต่ C ไม่ได้ถูกกล่าวถึงว่าเป็นมิตรกับมือใหม่