浮點型的一個隱性特徵

因子

這個論題來自今天我在segmentfault的回覆。
有我的問segmentfault

《C++ Primer》第五版,中文版。p33。
1.999999999999999(比轉換以後少是 2 的少個 9) 也是 1。編輯器

微軟免費 IDE 2015。g++ 好像也同樣。學習

#include 
using namespace std;

int main()
{
    double d = 1.9999999999999999;
    int i = d;
    cout

答覆

吶,若是你C語言學習的足夠牢靠的話,你應該知道double型的精度是小數點後15位,而若是你寫了16位的話,編譯器會認爲你輸入的值無效,而自動幫你轉換爲2.0。
而根據浮點型轉整形的指令規範,1.x轉換後均爲1,相似的,2.0天然爲2。優化

補充

實質上,你本身寫個程序,而後右鍵彙編就能夠看出來了,很是簡單的問題。
我再補充下彙編代碼就更加清楚了。spa

15個9的時候,編譯後的代碼中此處的值爲 0x3ffffffffffffffbcode

16個9的時候,編譯後的代碼直接就是 0x4000000000000000,即2.0blog

即,這一過程是由編輯器進行的優化而已。get

相關文章
相關標籤/搜索