Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ความแม่นยำของจำนวนจุดลอยตัวใน C++ (floor(), ceil(), trunc(), round() และ setprecision())


ความแม่นยำของจำนวนจุดลอยตัว (Precision of floating point numbers) คือความแม่นยำที่จำนวนจุดลอยตัวสามารถเก็บค่าหลังจุดทศนิยมได้

ตัวอย่างเช่น 10/6 = 1.6666666... นี้มีทศนิยมซ้ำซ้อนซึ่งสามารถใช้พื้นที่หน่วยความจำไม่จำกัดได้

ดังนั้นเพื่อป้องกันการล้นหน่วยความจำในกรณีเช่นนี้ คอมไพเลอร์ตั้งค่าขีดจำกัดความแม่นยำให้กับตัวเลข สำหรับค่า float ใน C++ ความแม่นยำนี้ตั้งไว้ที่ 6-7 หลัก หลังจากนั้นถ้าทศนิยมซ้ำ จะทิ้งค่าทิ้ง

ดังนั้น เพื่อป้องกันความสูญเสียร้ายแรงเมื่อการทิ้งค่านี้เกิดขึ้น มีเมธอดและไลบรารีที่รองรับความแม่นยำในค่า float ที่นี่เราจะพูดถึงพวกเขา

floor()

ฟังก์ชัน floor() เป็นฟังก์ชันปัดลงที่ปัดตัวเลขเป็นค่าจำนวนเต็มที่ใกล้ที่สุดซึ่งน้อยกว่าตัวเลข

มันจะคืนค่าจำนวนเต็มที่น้อยกว่าส่วนจำนวนเต็มของ float number หนึ่ง

Library: math.h

ตัวอย่าง

#include<iostream>
#include<math.h>
using namespace std;

int main() {
    float number1 = 0.435 , number2 = 234.2342, number3 = -3.31132, number4 = -0.432;
    cout<<"Values are : \n";
    cout<<"Number 1 : "<<floor(number1)<<endl;
    cout<<"Number 2 : "<<floor(number2)<<endl;
    cout<<"Number 3 : "<<floor(number3)<<endl;
    cout<<"Number 4 : "<<floor(number4)<<endl;
    return 0;
}

ผลลัพธ์

Values are :
Number 1 : 0
Number 2 : 234
Number 3 : -4
Number 4 : -1

ceil()

ฟังก์ชัน ceil() เป็นฟังก์ชันปัดที่ปัดตัวเลขเป็นค่าจำนวนเต็มที่ใกล้ที่สุดซึ่งมากกว่าตัวเลข

มันจะคืนค่าจำนวนเต็มที่มากกว่าส่วนจำนวนเต็มของ float number หนึ่ง

Library: math.h

ตัวอย่าง

#include<iostream>
#include<math.h>
using namespace std;

int main() {
    float number1 = 0.435 , number2 = 234.2342, number3 = -3.31132, number4 = -0.432;
    cout<<"Values are : \n";
    cout<<"Number 1 : "<<ceil(number1)<<endl;
    cout<<"Number 2 : "<<ceil(number2)<<endl;
    cout<<"Number 3 : "<<ceil(number3)<<endl;
    cout<<"Number 4 : "<<ceil(number4)<<endl;
    return 0;
}

ผลลัพธ์

Values are :
Number 1 : 1
Number 2 : 235
Number 3 : -3
Number 4 : -0

round()

ฟังก์ชัน round() เป็นฟังก์ชันปัดที่ปัดตัวเลขเป็นค่าจำนวนเต็มที่ใกล้ที่สุดซึ่งอาจมากกว่าหรือน้อยกว่าตัวเลข

มันจะคืนค่าจำนวนเต็มที่อาจมากกว่าหรือน้อยกว่าส่วนจำนวนเต็มของ float number หนึ่ง

Library: math.h

ตัวอย่าง

#include<iostream>
#include<math.h>
using namespace std;

int main() {
    float number1 = 0.435 , number2 = 234.5612, number3 = -3.31132, number4 = -0.9132;
    cout<<"Values are : \n";
    cout<<"Number 1 : "<<ceil(number1)<<endl;
    cout<<"Number 2 : "<<ceil(number2)<<endl;
    cout<<"Number 3 : "<<ceil(number3)<<endl;
    cout<<"Number 4 : "<<ceil(number4)<<endl;
    return 0;
}

ผลลัพธ์

Values are :
Number 1 : 1
Number 2 : 235
Number 3 : -3
Number 4 : -0

setprecision()

ฟังก์ชัน setprecision() คืนค่าของ float ที่ถูกต้องถึง n ตำแหน่งทศนิยม n คือพารามิเตอร์ที่ส่งให้ฟังก์ชัน setprecision

สำหรับการทำงาน ใช้ fixed

Library: iomanip

ตัวอย่าง

#include<iostream>
#include<iomanip>
using namespace std;

int main() {
    float number1 = 0.435 , number2 = 234.5612, number3 = -3.31132, number4 = -0.9132;
    cout<<"Nubmer 1 correct upto 0 decimals "<<fixed<<setprecision(0)<<number1<<endl;
    cout<<"Nubmer 2 correct upto 1 decimals "<<fixed<<setprecision(1)<<number2<<endl;
    cout<<"Nubmer 3 correct upto 4 decimals "<<fixed<<setprecision(4)<<number3<<endl;
    cout<<"Nubmer 4 correct upto 3 decimals "<<fixed<<setprecision(3)<<number4<<endl;
}

ผลลัพธ์

Nubmer 1 correct upto 0 decimals 0
Nubmer 2 correct upto 1 decimals 234.6
Nubmer 3 correct upto 4 decimals -3.3113
Nubmer 4 correct upto 3 decimals -0.913