英文:
Constant truncated to integer
问题
以下是翻译好的部分:
以下GO程序出现错误:
./fft.go:13: 常量-6.28319截断为整数
./fft.go:13: 无法将类型为int的-7 * k / N用作类型为float64的赋值
程序:
package main
import (
"math"
"fmt"
)
func main() {
fmt.Println("Hello world ",math.E)
var k, N int = 1, 10
var ans float64 = 0
var c float64 = (-2.0 * math.Pi * k) / N
x := make([]float64,N)
for i := 0; i < len(x); i++ {
x[i] = 1
}
ans = 0
for i := 0; i < N; i++ {
ans += x[i] * math.E
}
fmt.Println(ans)
}
为什么我不能在float64类型中使用int类型?
英文:
The following GO program gives the error:
./fft.go:13: constant -6.28319 truncated to integer
./fft.go:13: cannot use -7 * k / N (type int) as type float64 in assignment
Program:
package main
import (
"math"
"fmt"
)
func main() {
fmt.Println("Hello world ",math.E)
var k, N int = 1, 10
var ans float64 = 0
var c float64 = (-2.0 * math.Pi * k) / N
x := make([]float64,N)
for i := 0; i < len(x); i++ {
x[i] = 1
}
ans = 0
for i := 0; i < N; i++ {
ans += x[i] * math.E
}
fmt.Println(ans)
}
Why cant I use an int
in a type of float64
?
答案1
得分: 17
Replace
var c float64 = (-2.0 * math.Pi * k) / N
by
var c float64 = (-2.0 * math.Pi * float64(k)) / float64(N)
To quote the spec:
> Conversions are required when different numeric types are mixed in an
> expression or assignment. For instance, int32 and int are not the same
> type even though they may have the same size on a particular
> architecture.
Go uses static typing and doesn't automatically convert between numeric types. The reason is probably to avoid some errors. For instance, what value and what type should float64(2.5) * int(2)
yield? Should the result be int(5)
? int(4)
? float64(5.0)
? In Go, this isn't an issue. The Go FAQ has more to say on this.
@jnml points out that, in this case, the following is enough:
var c float64 = -2 * math.Pi / float64(N)
英文:
Replace
var c float64 = (-2.0 * math.Pi * k) / N
by
var c float64 = (-2.0 * math.Pi * float64(k)) / float64(N)
To quote the spec:
> Conversions are required when different numeric types are mixed in an
> expression or assignment. For instance, int32 and int are not the same
> type even though they may have the same size on a particular
> architecture.
Go uses static typing and doesn't automatically convert between numeric types. The reason is probably to avoid some errors. For instance, what value and what type should float64(2.5) * int(2)
yield? Should the result be int(5)
? int(4)
? float64(5.0)
? In Go, this isn't an issue. The Go FAQ has more to say on this.
@jnml points out that, in this case, the following is enough:
var c float64 = -2 * math.Pi / float64(N)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论