C++浮點數比較與精度損失

1.浮點數在計算機中的存儲機制ios

32bit:bit0~bit22存儲有效數字部分;bit23~bit30存儲指數部分;bit31存儲符號位spa

64bit:bit0~bit51存儲有效數字部分;bit52~bit62存儲指數部分;bit63存儲符號位code

例如:30.25get

二進制表示方法:11110.01,轉換爲二進制指數法:1.111001*2^4string

2.使用浮點數可能出現的精度損失it

#include <iostream>
#include <string>
using namespace std;
void main()
{
	char buff[100] = { '\0' };
	float fa = 500.5;//存儲的時候轉換爲二進制111110100.1,存儲有效位的bit是足夠的,因此並不會有精度損失
	float fb = 500.344;//111110100.0101100000000....後面多少位,懶得算了,存儲有效數字部分的bit應該是不夠的,因此存儲進來會出現精度損失
	float fc = 500.125;//111110100.001,和第一種狀況同樣,bit足夠存儲有效位,因此不會有精度損失

	//固然同理,double類型的數據也會出現以上狀況,只是所佔字節數不同罷了

	getchar();
}

所以,是否會出現精度損失,與你的數據自己有關係,換句話說,就是小數點後面的部分能不能用有限位數的來表示,即n是否小於float或者double用於存儲有效爲的bit數。io

3.浮點數比較的方法-epsilon-方法class

假定存在兩個浮點數A,B,若是直接比較,是很是不明智的,能夠令X=A-B,再設定一個小的參考量e=0.0001(結合實際狀況設定),而後比較X與e之間的大小。stream

相關文章
相關標籤/搜索