MySQL中无符号FLOAT值的范围

时间:2017-05-16 21:33:38

标签: mysql sql precision numeric

根据MySQL Numeric types documentation,其中,Float类型具有以下属性:

  

FLOAT [(M,D)] [未签名] [ZEROFILL]

     

小(单精度)浮点数。允许值为-3.402823466E + 38至-1.175494351E-38,0和1.175494351E-38至3.402823466E + 38。这些是基于IEEE标准的理论限制。实际范围可能略小,具体取决于您的硬件或操作系统。

     

M是总位数,D是小数点后面的位数。如果省略M和D,则将值存储到硬件允许的限制。单精度浮点数精确到大约7位小数。

     

UNSIGNED,如果指定,则禁止否定值。

我想确定unsigned float的行为是否与unsigned int的行为类似,其中十进制和​​尾数的完整位深度用于表示正值,或{{1}只能防止负值。

1 个答案:

答案 0 :(得分:3)

  

我想确定unsigned float的行为是否类似于   unsigned int的行为,其中的完整位深度   decimal和mantissa用于表示正值,或

没有。 MySQL选择为其FLOAT使用IEEE-754单精度浮点数。 IEEE Float是" sign-magnitude",因此符号位占据了自己的特定位置。另一方面,INT是2的补码编码。因此,符号的位可以被解释为符号或值的扩展。 (警告:几乎所有当前的计算机硬件都按照本段所述的方式工作;但可能有一些没有。一个古老的例子:CDC 6600使用1的补充。)

  

如果无符号浮点数仅防止负值。

必须说明的是:如果您使用的是固有的不精确FLOAT数据类型,您应该考虑为什么您的问题空间会禁止所有负数。这些数字忠实地代表了问题空间吗? FLOAT的不精确性是否适用于您所代表的内容?

浮点数上可能存在无计算的想法是虚幻的。只从整数生成它们涉及计算。是的,它直接在计算机芯片上完成,但它仍在计算中。

并且,丢包的例子是

  1. 由两个整数精确表示:丢包数/包数(如果需要,可以称之为有理数),或者
  2. 近似由FLOAT分数表示,该分数是由将这些整数中的一个除以另一个而产生的。
  3. 尊重你,你会过度思考这个问题。

    无论添加到其上的选项如何,

    FLOAT总是占用4个字节。另一方面,DECIMAL(m,n)占用(m / 2)个字节。

    FLOAT(m,n),可能毫无用处。 n表示将以十进制舍入到n个位置,然后存储到二进制数字(IEEE Float)中,从而导致另一个舍入。