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
Lepaskan: 2024-12-24 05:34:20
asal
602 orang telah melayarinya

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)
}
Salin selepas log masuk

Apabila dilaksanakan, kod ini menghasilkan keputusan yang tidak dijangka:

x == 10.1:         true
x*3.0 == 10.1*3.0: false
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan