第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

int64(math.Pow(2, 63) - 1) 結(jié)果為 -922337203685477580

int64(math.Pow(2, 63) - 1) 結(jié)果為 -922337203685477580

Go
不負(fù)相思意 2023-01-03 13:39:50
我正在嘗試存儲(chǔ)不同位的最大和最小有符號(hào)整數(shù)。該代碼適用于 int64 以外的整數(shù)package mainimport (    "fmt"    "math")func main() {    var minInt8 int8 = -128    var maxInt8 int8 = 127    fmt.Println("int8\t->", minInt8, "to", maxInt8)    fmt.Println("int8\t->", math.MinInt8, "to", math.MaxInt8)    var minInt16 int16 = int16(math.Pow(-2, 15))    var maxInt16 int16 = int16(math.Pow(2, 15) - 1)    fmt.Println("int16\t->", minInt16, "to", maxInt16)    fmt.Println("int16\t->", math.MinInt16, "to", math.MaxInt16)    var minInt32 int32 = int32(math.Pow(-2, 31))    var maxInt32 int32 = int32(math.Pow(2, 31) - 1)    fmt.Println("int32\t->", minInt32, "to", maxInt32)    fmt.Println("int32\t->", math.MinInt32, "to", math.MaxInt32)    var minInt64 int64 = int64(math.Pow(-2, 63))    var maxInt64 int64 = int64(math.Pow(2, 63) - 1) // gives me the wrong output    fmt.Println("int64\t->", minInt64, "to", maxInt64)    fmt.Println("int64\t->", math.MinInt64, "to", math.MaxInt64)}輸出:int8    -> -128 to 127int8    -> -128 to 127int16   -> -32768 to 32767int16   -> -32768 to 32767int32   -> -2147483648 to 2147483647int32   -> -2147483648 to 2147483647int64   -> -9223372036854775808 to -9223372036854775808int64   -> -9223372036854775808 to 9223372036854775807我不知道這種行為的原因,我們將不勝感激。
查看完整描述

1 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

這里有多個(gè)問題:

math.Pow返回一個(gè)float64。此類型不能用于表示此處嘗試計(jì)算所需的具有全精度的 64 位帶符號(hào)整數(shù)。引用自雙精度浮點(diǎn)格式

整數(shù)值的精度限制

  • 從 ?2^53 到 2^53(?9,007,199,254,740,992 到 9,007,199,254,740,992)的整數(shù)可以精確表示

  • 2^53 和 2^54 之間的整數(shù) = 18,014,398,509,481,984 四舍五入到 2 的倍數(shù)(偶數(shù))

  • 2^54 和 2^55 之間的整數(shù) = 36,028,797,018,963,968 舍入為 4 的倍數(shù)

即使精度足夠(在 2^63 的特殊情況下也是如此),float64 的精度也不足以從 2^63 中減去 1。只需嘗試以下操作(這里使用 uint64,因?yàn)?signed int64 是不夠的):

uint64(math.Pow(2, 63))    // -> 9223372036854775808
uint64(math.Pow(2, 63)-1)  // -> 9223372036854775808

先將值轉(zhuǎn)換為 uint64 然后再減去,但這只是因?yàn)?2^63 可以在 float64 中用完整的預(yù)定義表示,即使具有此大小的其他值不能:

uint64(math.Pow(2, 63))-1  // -> 9223372036854775807


查看完整回答
反對(duì) 回復(fù) 2023-01-03
  • 1 回答
  • 0 關(guān)注
  • 259 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)