ดังที่ได้กล่าวไว้ก่อนหน้านี้สำหรับจำนวนบวกจะเหมือนกัน แต่ต่างกันสำหรับจำนวนลบ กฎคือ int จะปัดเศษไปทาง 0 ในขณะที่พื้นจะปัดเศษเข้าหาอินฟินิตี้เชิงลบ
floor(4.5) = (int)4.5 = 4
floor(-4.5) = -5
(int)(-4.5) = -4
เวลาดำเนินการก็มีความแตกต่างกันเช่นกัน ในระบบของฉันฉันตั้งเวลาไว้ว่าการแคสต์เร็วกว่าพื้นอย่างน้อย 3 เท่า
ฉันมีรหัสที่ต้องการการดำเนินการขั้นพื้นฐานของช่วงค่าที่ จำกัด รวมถึงตัวเลขเชิงลบ และต้องมีประสิทธิภาพมากดังนั้นเราจึงใช้ฟังก์ชันต่อไปนี้สำหรับมัน:
int int_floor(double x)
{
return (int)(x+100000) - 100000;
}
แน่นอนว่าสิ่งนี้จะล้มเหลวสำหรับค่า x ที่มีขนาดใหญ่มาก (คุณจะพบปัญหาล้น) และสำหรับค่าลบที่ต่ำกว่า -100000 เป็นต้น แต่ฉันได้โอเวอร์คล็อกให้เร็วกว่าพื้นอย่างน้อย 3 เท่าซึ่งสำคัญมาก สำหรับแอปพลิเคชันของเรา ใช้เกลือเม็ดทดสอบกับระบบของคุณ ฯลฯ แต่ก็คุ้มค่าที่จะพิจารณา IMHO
floor
แต่ระวังว่านี้เป็นไม่ได้สำหรับdouble
float
C99 ยังมีfloorf
สำหรับfloat
.