嫻偣鏁板垎涓哄崟綺懼害鍜屽弻綺懼害,Java涓殑鍗曠簿搴﹀拰鍙岀簿搴﹀垎鍒負(fù)float鍜宒ouble.浣犱滑鐭ラ亾float鍜宒ouble鏄庝箞瀛樺偍鐨勫悧?
銆銆float鍗?涓瓧鑺?double鍗?涓瓧鑺?涓轟簡鏂逛究璧瘋,榪欓噷灝卞彧璁ㄨfloat綾誨瀷.
銆銆float鍏跺疄鍜屼竴涓猧nt鍨嬬殑澶у皬鏄竴鏍風(fēng)殑,涓鍏?2浣?絎竴浣嶈〃紺虹鍙?2-9琛ㄧず鎸囨暟,鍚庨潰23浣嶈〃紺哄皬鏁伴儴鍒?
銆銆榪欓噷鍙婦涓涓緥瀛?甯屾湜鑳芥姏鐮栧紩鐜?灝辨槸鐮旂┒涓涓嬫誕鐐規(guī)暟0.1鐨勫瓨鍌ㄥ艦寮?鍏堣繍琛岃繖涓▼搴?
聽銆 public class Test{
銆銆public static void main(String[] args) {
銆銆int x = 0x3d800000;
銆銆int i = 1 << 22;
銆銆int j = 1 << 4;
銆銆float f = 0.1f;
銆銆int y = Float.floatToIntBits(f);
銆銆float rest = f - ( (float) 1) / j;
銆銆while (i > 0) {
銆銆j <<= 1;
銆銆float deta = ( (float) 1) / j;
銆銆if (rest >= deta) {
銆銆rest -= deta;
銆銆x |= i;
銆銆}
銆銆i >>= 1;
銆銆}
銆銆pr(x);
銆銆pr(y);
銆銆}
銆銆static void pr(int i) {
銆銆System.out.println(Integer.toBinaryString(i));
銆銆}
銆銆}
聽
銆銆緇撴灉:
銆銆111101110011001100110011001101
銆銆111101110011001100110011001101
銆銆紼嬪簭璇存槑:
銆銆int x=0x3d80000;
銆銆鍥犱負(fù)嫻偣琛ㄧず褰㈠紡涓?.f*2n-127鎴戜滑瑕佽〃紺?.1,鍙互鐭ラ亾n-127=-4,鍒皀=123
銆銆絎﹀彿涓烘,鍙煡鍓?鏄?001111011,鏆傛椂涓嶈冭檻鍚庨潰鐨?3浣嶅皬鏁?鎵浠ユ垜浠厛鍋囪x=0x3d800000;
聽銆銆int i = 1 << 22;
銆銆i鍒濆涓虹鍙寵搗絎?3浣嶄負(fù)1,灝辨槸x鐨勭10浣?
聽銆銆int j = 1 << 4;
銆銆i鍒濆涓?,鍥犱負(fù)n-127涓?4,榪欓噷鏄負(fù)浜嗘眰瀹冪殑鍊掓暟.
聽銆銆float f = 0.1f;
銆銆int y = Float.floatToIntBits(f);
銆銆y灝辨槸瀹冪殑32浣嶈〃紺?
聽銆銆float rest = f - ( (float) 1) / j;
銆銆榪欎釜rest琛ㄧず闄や簡1.f涓殑1鍓╀笅鐨?涔熷氨鏄?.f
聽銆銆while (i > 0) {
銆銆j <<= 1;
銆銆float deta = ( (float) 1) / j;
銆銆if (rest >= deta) {
銆銆rest -= deta;
銆銆x |= i;
銆銆}
銆銆i >>= 1;
銆銆}
銆銆榪欎釜寰幆鏉ヨ綆?3浣嶅皬鏁伴儴鍒?濡傛灉rest涓嶅皬浜巇eta,琛ㄧず榪欎釜浣嶅彲浠ョ疆涓?.
銆銆鍏朵粬鐨勪笉澶氳浜?杈撳叆緇撴灉鏄竴鏍風(fēng)殑,鍙互璇?.1榪欎釜嫻偣鏁拌偗瀹氭槸涓嶇簿紜殑,浣嗘槸0.5鍙互綺劇‘鐨勮〃紺?鎯蟲兂涓轟粈涔堝惂.
杞嚦 www.csdn.net