我正在寻找一种算法,该算法采用64位浮点数并输出指数和系数,因此输入可以float64 input = coefficient * 10 ^ exponent
的形式表示。
据说这不是“微不足道”,Golang的许多精确十进制格式的实现(没有内置的十进制类型)对它有一些破解,比如转换为字符串并解析它。虽然这个解决方案确实适用于我见过的软件包,但这似乎是“适当的”以数学/计算机科学的方式进行。
答案 0 :(得分:0)
可能不是100%精确,但您可以使用Log10:
package main
import (
"fmt"
"math"
)
func parts(v float64) (float64, int) {
e := math.Floor(math.Log10(v))
c := v / math.Pow(10, e)
return c, int(e)
}
func main() {
c, e := parts(1348.234e134)
fmt.Printf("%v * 10^%v", c, e) // 1.3482339999999997 * 10^137
}