2 回答

TA貢獻1831條經驗 獲得超9個贊
很簡單,該表達式(5/9)
被評估為(int(5)/int(9))
equals 0
。嘗試(5./9)
為了弄清楚為什么會發生這種情況,它處理了確定表達式變量類型的順序。
我猜想b / c的(5/9)
存在不考慮input
上述情況2和4,編譯器將它們解釋為,int
并簡單地將表達式替換為0,這時零被認為取決于輸入,因此float64
在最終之前采用類型匯編。
一般來說,Go不會為您轉換數字類型,因此這是唯一對我有意義的解釋。

TA貢獻1860條經驗 獲得超8個贊
在圍棋語言規格說明float32
和float64
簽署浮動遵循IEEE-754標準的數字。以下是引自維基百科的文字-簽名為零:
IEEE 754浮點算術標準(目前大多數支持浮點數的計算機和編程語言都在使用)要求+0和?0。零可被視為擴展實數線的變體,因此1 / ?0 =-∞和1 / + 0 = +∞,僅對±0 /±0和±∞/±∞未定義以零除。
顯然,input
當afloat64
加上負32時,它變成另一個float64
為負數。5/9
評估為0
。負數float64
計時0
為-0
。
有趣的是,如果您將input
整數替換為,例如1
,則會得到0
而不是-0
。似乎在Go中,浮點數同時具有+0
和-0
,而整數則沒有。
編輯: PhiLho在注釋中解釋了為什么整數不具有浮點數的原因:標準化的浮點數具有+ 0,-0,NaN,+ Infinity和-Infinity的特殊表示形式,而您無法保留一些位組合整數具有這樣的含義。
- 2 回答
- 0 關注
- 282 瀏覽
添加回答
舉報