首頁 >後端開發 >Golang >為什麼 Go 中比較變數和文字時浮點相等會失敗?

為什麼 Go 中比較變數和文字時浮點相等會失敗?

Patricia Arquette
Patricia Arquette原創
2024-12-24 05:34:20605瀏覽

Why Does Floating-Point Equality Fail in Go When Comparing Variables and Literals?

Go 中的浮點精確度:理解文字和變數之間的差異

差異

在 Go🎜>差異

package main

import (
    "fmt"
)

func main() {
    x := 10.1
    fmt.Println("x == 10.1:        ", x == 10.1)
    fmt.Println("x*3.0 == 10.1*3.0:", x*3.0 == 10.1*3.0)
}

在 Go🎜>差異

x == 10.1:         true
x*3.0 == 10.1*3.0: false

在 Go中,以下程式碼片段揭示了浮點的有趣差異計算:

執行時,此程式碼會產生意外結果:

使用宣告的變數(x) 或文字執行相同的浮點運算(10.1),相等性檢查失敗。

起源差異

要理解這種行為,必須深入研究 Go 對浮點數的處理。常數和數字文字最初是無類型的並且具有無限精度。但是,當分配給變數或進行類型轉換時,它們會繼承目標類型的限制。

當分配 x := 10.1 時,文字 10.1 由於轉換為浮點數而失去一些精確度。相反,10.1*3.0 在計算中保持其完整精度。這解釋了觀察到的值差異和錯誤的相等性檢查。

文件與基本原理

Go部落格文章的「Floats」部分概述了此行為Constants:「數字常數存在於任意精確度的數字空間中;它們只是常規數字。但是當它們被分配給一個變量,該值必須能夠適合目標。 Go 中的點表示。這些知識使開發人員能夠有效地預測和處理程式碼中與精確度相關的問題。

以上是為什麼 Go 中比較變數和文字時浮點相等會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn