很好奇為什么以下會產生兩個不同的值。 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 位。
如果無法精確表示整數常量,則給出錯誤。
如果由于溢出而無法表示浮點或復數常量,則給出錯誤。如果由于精度限制而無法表示浮點或復數常量,則舍入到最接近的可表示常量。
- 1 回答
- 0 關注
- 177 瀏覽
添加回答
舉報
0/150
提交
取消