V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
mdvis
V2EX  ›  Go 编程语言

问下各位大佬, Go 里面说 ‘一个 float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十进制数的精度’

  •  
  •   mdvis · 2022-10-24 11:31:20 +08:00 · 1999 次点击
    这是一个创建于 750 天前的主题,其中的信息可能已经有所发展或是发生改变。

    菜鸟一只,这个‘大约 6 个十进制数的精度’ 和 ‘15 个十进制数的精度’ 咋理解,精度还能这么按个算,完全不理解

    10 条回复    2022-10-24 15:24:02 +08:00
    liyang5945
        1
    liyang5945  
       2022-10-24 11:40:06 +08:00
    就是可以精确到小数点后面第几位的意思
    gilgameshhh
        2
    gilgameshhh  
       2022-10-24 11:48:13 +08:00   ❤️ 1
    参考 IEEE754 标准,尾数有多少位,精度就到 2 的负多少次方。算下来大概 4 字节浮点数就是七八位,8 字节浮点数就是十五六位
    ruxuan1306
        3
    ruxuan1306  
       2022-10-24 11:51:16 +08:00
    科学计数法,十的几次方前面乘的那个数。
    rekulas
        4
    rekulas  
       2022-10-24 12:00:11 +08:00
    楼上的没说对 并不是小数点后多少位,而是整数+小数部分总共多少位
    因为计算机一个变量类型可使用的字节数有限(比如 int 只有 4 字节),所以只能存储有限位数的小数
    msg7086
        5
    msg7086  
       2022-10-24 12:11:34 +08:00
    比如 1 个十进制数的精度下,0.1 和 0.2 是两个数字,0.11 和 0.12 是一个数字(由于精度不足导致无法分别他们的差异)。
    momocraft
        6
    momocraft  
       2022-10-24 12:24:12 +08:00   ❤️ 1
    盲猜原文是 6 decimal precision

    这个的正常翻译是 6 **位** 十进制精度
    nightwitch
        7
    nightwitch  
       2022-10-24 12:53:00 +08:00
    就是数学里 有效数字 的概念,从首位非 0 的数字开始算起。
    非规格化的 float32 至少能表示 6 位有效数字,规格化的 float32 至少能表示 7 位有效数字。
    可以看看这个
    https://www.cnblogs.com/tsingke/p/10223183.html
    huxins
        8
    huxins  
       2022-10-24 13:00:38 +08:00
    单精度浮点数,尾数占 23 bit ,`1<<23` 对应十进制是 8388608 ,所以,单精度浮点数有效小数位 6 位
    双精度浮点数,尾数占 52 bit ,`1<<52` 对应十进制是 4503599627370496 ,因此有效小数位是 15 位。
    mdvis
        9
    mdvis  
    OP
       2022-10-24 14:12:26 +08:00
    谢谢各位大佬,明白了,根据 IEEE754 规定

    单精度浮点数(float32)占用 4 个字节( 32 位)存储空间,包括符号位 1 位,阶码 8 位(指数部分),尾数 23 位。其数值范围为-3.4E38 ~ 3.4E38 ,单精度浮点数最多有 7 位十进制有效数字

    双精度浮点数(float64)占用 8 个字节( 64 位)存储空间,包括符号位 1 位,阶码 11 位(指数部分),尾数 52 位。其数值范围为-1.7E-308 ~ 1.7E+308 ,双精度浮点数最多有 15 或 16 位十进制有效数字
    aneostart173
        10
    aneostart173  
       2022-10-24 15:24:02 +08:00
    不是小数点后多少位,是总共多少位。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1052 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 20:11 · PVG 04:11 · LAX 12:11 · JFK 15:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.