Rumah > pembangunan bahagian belakang > Golang > Mengapa Perbandingan Titik Terapung di Pergi Kadangkala Menghasilkan Keputusan Yang Tidak Dijangka?

Mengapa Perbandingan Titik Terapung di Pergi Kadangkala Menghasilkan Keputusan Yang Tidak Dijangka?

Patricia Arquette
Lepaskan: 2024-12-04 11:33:09
asal
655 orang telah melayarinya

Why Do Floating-Point Comparisons in Go Sometimes Yield Unexpected Results?

Perbezaan Ketepatan Titik Terapung dalam Go: Pemalar lwn. Pembolehubah

Dalam Go, literal titik terapung dan pemalar mengekalkan ketepatan arbitrari sehingga ditetapkan kepada jenis tertentu. Walau bagaimanapun, operasi dan tugasan tertentu memperkenalkan perbezaan ketepatan yang boleh di luar jangkaan.

Pertimbangkan kod berikut:

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

Kod ini menghasilkan output:

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

Mengapa adakah ungkapan ini tidak sama, walaupun melakukan operasi titik terapung yang sama?

Tidak ditaip Pemalar dan Pembolehubah

Nombor literal dan pemalar dalam Go tidak ditaip, dengan ketepatan tanpa had. Apabila ditugaskan kepada pembolehubah, seperti x := 10.1, literal ditukar kepada jenis pembolehubah (float64 dalam kes ini) dan kehilangan sedikit ketepatan.

Pemalar Ketepatan Penuh

Sebaliknya, ungkapan literal seperti 10.1*3.0 mengekalkan ketepatan penuh sebelum penilaian. Apabila ditugaskan kepada pembolehubah, ia serta-merta ditukar kepada jenis pembolehubah, memastikan ketepatan dikekalkan.

Pertimbangan Ketepatan

Memahami perbezaan dalam pengendalian ketepatan boleh menjadi penting untuk pengiraan titik terapung yang tepat. Contohnya, apabila membandingkan nilai dengan toleransi yang ditentukan, adalah penting untuk menggunakan literal atau ungkapan dengan ketepatan penuh untuk mengelakkan positif palsu.

Dokumentasi

Tingkah laku ini baik. -didokumenkan dalam artikel blog Go "Pemalar" di bawah pengepala "Apung", yang menerangkan bahawa walaupun pemalar berangka mempunyai ketepatan sewenang-wenangnya, ia mesti muat dalam julat pembolehubah yang ditugaskan kepadanya.

Kesimpulan

Perbezaan ketepatan antara pemalar titik terapung berbanding pembolehubah dalam Go adalah mengikut reka bentuk , membolehkan lebih fleksibiliti dan pertukaran prestasi dalam operasi titik terapung. Dengan memahami perbezaan ketepatan ini, pengaturcara boleh mengoptimumkan kod mereka untuk ketepatan dan kecekapan.

Atas ialah kandungan terperinci Mengapa Perbandingan Titik Terapung di Pergi Kadangkala Menghasilkan Keputusan Yang Tidak Dijangka?. 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