2017-07-30 16 views
7

Tôi chỉ cần chạy mã này vào máy của tôi:Go gói toán có kết quả không hợp lệ

package main 

import (
    "fmt" 
    "math" 
) 

func main() { 
    const ali = 4e20 
    fmt.Println(math.Sin(ali)) 
} 

và nhận được kết quả này:

1.3471173831553043e+258 

Tại sao kết quả Sin đi hơn 1?

Python và một số ngôn ngữ khác có kết quả chính xác

+1

Rất thú vị. Bạn có chắc 'python' cung cấp cho bạn câu trả lời đúng không? Tôi đã thử: 'math.sin (4e20)' và 'math.sin (4e20 + 1)' và tôi nhận được kết quả tương tự: '-0.3298871424318473'. Cảm giác của tôi ở đây là với những phao lớn, độ chính xác rất thấp, và không thể tính chính xác 'sin'. Tôi gần như nghĩ rằng 'go' cố tình cho bạn giá trị lớn về mục đích, vì vậy bạn sẽ biết rằng có điều gì đó sai, nhưng theo mã nguồn: https://golang.org/src/math/sin.go?s= 5085: 5112 # L164, nó có thể đã xảy ra tai nạn. – Akavall

+0

Dường như đây là [lỗi đã biết] (https://github.com/golang/go/issues/6794). Bạn không chắc chắn công việc tốt nhất là gì. – Flimzy

+0

Vâng @Akavall, nó đã đúng trong trăn 2 và 3 –

Trả lời

2

Nó có vẻ như nó chỉ là một vấn đề với việc thực hiện, nếu đầu vào là hơn 2 ** 49 nó gây ra vấn đề. Đã tìm thấy thực sự vấn đề cũ here

+1

Lỗi đó đã bị đóng như một bản sao của [cái này hoàn chỉnh hơn nhiều] (https://github.com/golang/go/issues/6794). – Flimzy

Các vấn đề liên quan