MySQL 中无符号 FLOAT 值的范围

Mat*_*her 2 mysql sql precision numeric

根据MySQL 数字类型文档,除其他外,浮点类型具有以下属性:

浮点数[(M,D)] [无符号] [零填充]

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

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

UNSIGNED,如果指定,则不允许负值。

我想确定 的行为是否unsigned float类似于unsigned int使用小数和尾数的完整位深度来表示正值的行为,或者unsigned floats 是否仅防止负值。

O. *_*nes 5

我想确定 unsigned float 的行为是否类似于 unsigned int 的行为,其中使用小数和尾数的完整位深度来表示正值,或者

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

if unsigned floats 仅防止负值。

是的。

必须说的是:如果您使用本质上不精确的FLOAT数据类型,您应该思考为什么您的问题空间禁止所有负数。这些数字是否忠实地代表了问题空间?是FLOAT对于您所代表的内容来说, 的不精确性可以接受吗

不可能有计算的想法无法对浮点数仅从整数生成它们就涉及计算。是的,它是直接在计算机芯片上完成的,但它仍然是计算。

并且,丢包的例子是

  1. 由两个整数精确表示:丢失的数据包数/数据包数(如果需要,您可以将其称为有理数),或者
  2. 大约由一个 FLOAT 分数表示,该分数是由这些整数之一除以另一个而得到的。

恕我直言,你想得太多了。

FLOAT始终占用 4 个字节,无论附加的选项如何。 DECIMAL(m,n)另一方面,占用大约(m/2) 个字节。

FLOAT(m,n),可能没用。表示n十进制四舍五入到 n 位,然后存储为二进制数(IEEE Float),从而导致另一次四舍五入。