亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Go 浮點數不能溢出而整數可以?

為什么 Go 浮點數不能溢出而整數可以?

Go
LEATH 2022-06-21 16:50:49
我在 Go 中測試了一些東西,注意到整數可以溢出,但float64顯然float32不能。f64 := math.MaxFloat64fmt.Printf("%f\n", f64)fmt.Printf("%f\n", f64+1)f32 := math.MaxFloat32fmt.Printf("%f\n", f32)fmt.Printf("%f\n", f32+1)i := math.MaxInt64fmt.Printf("%d\n", i)fmt.Printf("%d\n", i+1)結果:179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000340282346638528859811704183484516925440.000000340282346638528859811704183484516925440.0000009223372036854775807-9223372036854775808出于性能原因,顯然沒有檢查整數溢出,但為什么我不能讓浮點數溢出?他們被檢查了嗎?
查看完整描述

1 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

因為數據結構根本不同。大多數編程語言(包括 Go )用于(至少大部分)其整數數據類型的二進制補碼結構作為其工作方式的副產品溢出;大多數編程語言(包括 Go)用于(至少大部分)其浮點數據類型的IEEE-754 浮點不會溢出,它的工作方式數字的大小只會繼續增加,并且一旦過去某個點,即使在整數級別,數字也開始失去精度。

只是將數字數據存儲在一組固定大小的位中的兩種機制的工作方式根本不同。

還有其他結構。例如,某些語言具有不固定大小的“大整數”和/或“大十進制”類型;相反,它們占用了存放該號碼所需的空間。(Java 的BigIntegerBigDecimal,JavaScript 的BigInt,...)Go在Int中有,Rat和。(謝謝阿德里安!)固定大小的非常有用,因為它們非常快;但有時你想要速度以外的東西(擴展范圍、更好的浮點精度等),在這種情況下,你會為了你需要的其他東西犧牲一些速度。Floatmath/big


查看完整回答
反對 回復 2022-06-21
  • 1 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號