亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang浮點精度

golang浮點精度

Go
慕少森 2023-07-31 14:57:43
很好奇為什么以下會產生兩個不同的值。    fmt.Println(51.231576 * math.Pi / 180) // 0.8941596821857065     fmt.Println(float64(51.231576) * math.Pi / 180) //0.8941596821857064我知道這是微小的差異,但想了解原因。謝謝
查看完整描述

1 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

這與無類型?常量有關。無類型浮點常量可以比類型?常量保存精度更高的值float64。

因此,在第二行,在類型化常量表達式中,乘法產生的浮點數的精度遠小于第一行非類型化常量表達式中的乘法。

實現限制:盡管數字常量在語言中具有任意精度,但編譯器可以使用精度有限的內部表示來實現它們。也就是說,每個實施都必須:

  • 表示至少 256 位的整數常量。

  • 表示浮點常量,包括復數常量的部分,尾數至少為 256 位,帶符號二進制指數至少為 16 位。

  • 如果無法精確表示整數常量,則給出錯誤。

  • 如果由于溢出而無法表示浮點或復數常量,則給出錯誤。如果由于精度限制而無法表示浮點或復數常量,則舍入到最接近的可表示常量。

查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號