在Go中我可以声明一个类型化的浮点常量:
const foo float64 = 1e100
或任意位模式的浮点变量,如下所示:
var bar = math.Float64frombits(0x7ff8c0c0ac0ffee1)
但这是一个错误(“const初始化器......不是常量”):
const baz = math.Float64frombits(0x7ff8c0c0ac0ffee1)
如何声明任意位模式的类型化浮点数?
答案 0 :(得分:3)
如果要存储位值(基本上是 numberlist[i-1].Substring(0, 1);
),并将其作为uint64
提供给外部包,则可以提供“常量”功能,您可以保证只返回常量值。这正是math.NaN
等函数的工作原理。
float64
答案 1 :(得分:2)
您对Math.Float64frombits的调用发生在运行时,而不是编译时,因此不是常量。从有效的Go页面(这将比我更好地解释):
Go中的常量只是常量。它们是在编译时创建的 时间,即使在函数中被定义为本地人,也只能是 数字,字符串或布尔值。由于编译时限制, 定义它们的表达式必须是常量表达式, 可由编译器评估。例如,1 <&lt; 3是常数 表达式,而math.Sin(math.Pi / 4)不是因为函数调用 to math.Sin需要在运行时发生。
答案 2 :(得分:1)
您不能在常量声明中调用Float64frombits
之类的函数;函数调用意味着它不能在编译时完全评估,因此它不能用作常量。但是,您可以将位转储为浮点值:
const myFloat float64 = 0x7ff8c0c0ac0ffee1
func main() {
fmt.Println(myFloat)
}