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

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

為什么這兩個(gè)大浮點(diǎn)值不相等?

為什么這兩個(gè)大浮點(diǎn)值不相等?

Go
藍(lán)山帝景 2022-09-26 19:48:07
在過去的2周里,我一直在研究浮點(diǎn)的行為和功能,特別是GO中的大浮點(diǎn)。我遇到了許多行為,并自己找到了答案。但是,仍然有一個(gè)答案我找不到自己。https://play.golang.org/p/-y0oeb2Jisvvalue1 := big.NewFloat(137216723432.8234782347)value2 := big.NewFloat(71371.92602458)for i := 0; i < 300; i++ {    value1.Sub(value1, value2)}value3 := big.NewFloat(137216723432.8234782347)value4 := big.NewFloat(71371.92602458)for i := 0; i < 300; i++ {    result := big.NewFloat(0).Sub(value3,value4)    value3.Set(result)}encodedValue1, _ := value1.GobEncode()encodedValue3, _ := value3.GobEncode()if value1 == value3 {    fmt.Println("values are equal" , value1 , value3)} else {    fmt.Println("values are not equal", value1 ,value3)}fmt.Println("difference is here:\n", encodedValue1,"\n", encodedValue3)為什么這兩個(gè)操作的結(jié)果不相等?根據(jù)我的理解,這與精度/準(zhǔn)確性/舍入模式有關(guān)。
查看完整描述

1 回答

?
偶然的你

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

value1和 是指針,因此比較這些指針,而不是指向的值??赡苡?2 個(gè)指向的對(duì)象相等,但它們的地址不相等。value3value1 == value3

比較大。浮點(diǎn)值(或 ),請(qǐng)使用浮點(diǎn)值。如果 2 個(gè)值(它們表示的數(shù)字)相等,則返回。*big.Float0

if value1.Cmp(value3) == 0 {

    fmt.Println("values are equal", value1, value3)

} else {

    fmt.Println("values are not equal", value1, value3)

}

有了這個(gè)變化,輸出將是(在Go Playground上嘗試):

values are equal 1.3719531185501585e+11 1.3719531185501585e+11

difference is here:

 [1 2 0 0 0 53 0 0 0 37 255 139 210 151 120 32 120 0] 

 [1 10 0 0 0 53 0 0 0 37 255 139 210 151 120 32 120 0]

因此,表示的數(shù)字是相等的。

Float.GobEncode() 返回的序列化二進(jìn)制形式是不一樣的,但這并不意味著表示的數(shù)字不相等。正如其文檔所述:

戈布代碼實(shí)現(xiàn)了這個(gè)貪婪。Gob編碼器接口。將封送處理 Float 值及其所有屬性(精度、舍入模式、準(zhǔn)確性)。

輸出是不同的,因?yàn)?的內(nèi)部結(jié)構(gòu)不相同(在本例中為精度)。在這種情況下,即使您可以比較指向的對(duì)象,這些對(duì)象也不會(huì)相同,但表示的數(shù)字是相同的。同樣,始終使用提供的方法比較復(fù)雜對(duì)象,當(dāng)然不是地址。big.Float

此示例中的差異來自存儲(chǔ)的精度字段:

fmt.Println(value1.Acc())
fmt.Println(value3.Acc())

哪些輸出(在Go游樂場(chǎng)上嘗試):

Below
Exact

返回的精度是“最近操作產(chǎn)生的x的精度”。由于在 和 上執(zhí)行的最后一個(gè)操作不相同( 和 ),因此精度字段不一定相同(并且在此示例中它們確實(shí)不同)。由于準(zhǔn)確性屬性也包含在 Gob 序列化表單中,因此它們的序列化表單不同。Float.Acc()value1value3value1.Sub()value3.Set()


查看完整回答
反對(duì) 回復(fù) 2022-09-26
  • 1 回答
  • 0 關(guān)注
  • 95 瀏覽

添加回答

舉報(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)