ฉันมีโปรแกรมใน C ++ (เรียบเรียงโดยใช้ g ++) ฉันพยายามที่จะใช้สองคู่เป็นตัวถูกดำเนินการกับฟังก์ชั่นโมดูลัส แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:
ข้อผิดพลาด: ตัวถูกดำเนินการที่ไม่ถูกต้องของประเภท 'double' และ 'double' เป็นไบนารี 'โอเปอเรเตอร์%'
นี่คือรหัส:
int main() {
double x = 6.3;
double y = 2;
double z = x % y;
}
@supercat รายละเอียดเพิ่มเติมจะน่ากลัว ฉันคิดว่ามีความคิดเกี่ยวกับสิ่งที่อยู่เบื้องหลังเพื่อทำให้สิ่งที่คุณพูดนั้นเป็นความจริง แต่มันก็เป็นการดีที่ได้เห็นเหตุผลว่าทำไมสิ่งที่คุณพูดถึงเป็นจริง จะน่าสนใจเพื่อดูว่ามันทำงานอย่างไรเบื้องหลัง (ฉันคิดว่าฉันเข้าใจ แต่อาจผิดได้ง่ายมาก)
—
RastaJedi
ค่าจุดลอยตัวแสดงถึงจำนวนเต็มหรือเศษส่วนของกำลังสองที่แน่นอน ตัวอย่างเช่นค่าจำนวนเต็ม 0.1 ตัวอักษรเท่ากับ 3602879701896397/36028797018963968 (ค่าหลังคือกำลังสอง)
—
supercat
fmod(x,0.1)
จะหาร x ด้วยเศษส่วนที่แม่นยำนั้นและหาส่วนที่เหลือแทนที่จะหารด้วยค่าตัวเลข "หนึ่งในสิบ"
สำเนาที่เป็นไปได้: ทำไมการหารโมดูลัส (%) จึงใช้งานได้กับจำนวนเต็มเท่านั้น
—
Paul R
fmod
อาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด ตัวอย่างเช่นfmod(1, 0.1);
ควรเป็นศูนย์ทางคณิตศาสตร์ แต่ในความเป็นจริงจะมีค่าเกือบ 0.1 ขอบเขตของข้อผิดพลาดขึ้นกับขนาดของความฉลาด ตัวอย่างเช่นfmod(9E14, 0.1);
ประเมินเป็นประมาณ 0.05 ซึ่งมาจากมุมมองทางคณิตศาสตร์ที่ผิดธรรมดา