Rumah >pembangunan bahagian belakang >Golang >Mengapa Persamaan Titik Terapung Gagal Masuk Apabila Membandingkan Pembolehubah dan Huruf?

Mengapa Persamaan Titik Terapung Gagal Masuk Apabila Membandingkan Pembolehubah dan Huruf?

Patricia Arquette
Patricia Arquetteasal
2024-12-24 05:34:20607semak imbas

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

Ketepatan Titik Terapung dalam Go: Memahami Perbezaan Antara Huruf dan Pembolehubah

Percanggahan

In Go, the coretan kod berikut mendedahkan perbezaan yang menarik dalam titik terapung pengiraan:

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)
}

Apabila dilaksanakan, kod ini menghasilkan keputusan yang tidak dijangka:

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

Semasa operasi titik terapung yang sama dilakukan, menggunakan sama ada pembolehubah yang diisytiharkan (x) atau literal (10.1), semakan kesaksamaan gagal.

Asal usul Perbezaan

Untuk memahami tingkah laku ini, seseorang mesti menyelidiki pengendalian nombor titik terapung oleh Go. Pemalar dan huruf nombor pada mulanya tidak ditaip dan mempunyai无限精度. Walau bagaimanapun, apabila ditugaskan kepada pembolehubah atau ditukar jenis, mereka mewarisi pengehadan jenis destinasi.

Apabila x := 10.1 ditugaskan, literal 10.1 kehilangan sedikit ketepatan disebabkan penukaran kepada apungan. Sebaliknya, 10.1*3.0 mengekalkan ketepatan penuhnya dalam pengiraan. Ini menyumbang kepada perbezaan yang diperhatikan dalam nilai dan semakan kesaksamaan palsu.

Dokumentasi dan Rasional

Tingkah laku ini digariskan dalam bahagian "Terapung" dalam catatan blog Go pada pemalar:

"Pemalar berangka hidup dalam ruang berangka ketepatan arbitrari; ia hanyalah nombor biasa. Tetapi apabila ia ditugaskan kepada pembolehubah nilai mesti boleh dimuatkan dalam destinasi."

Walaupun mekanisme di sebalik tingkah laku ini, terutamanya dalam kes dengan pemalar yang sangat besar, kekal agak kabur, ia memberikan pandangan yang berharga ke dalam selok-belok perwakilan titik terapung dalam Go. Pengetahuan ini membolehkan pembangun menjangka dan mengendalikan isu berkaitan ketepatan dalam kod mereka dengan berkesan.

Atas ialah kandungan terperinci Mengapa Persamaan Titik Terapung Gagal Masuk Apabila Membandingkan Pembolehubah dan Huruf?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn