MySQL 中无符号 FLOAT 值的范围
Range of unsigned FLOAT values in MySQL
根据 MySQL Numeric types documentation,除其他外,Float 类型具有以下属性:
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
A small (single-precision) floating-point number. Permissible values are -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38. These are the theoretical limits, based on the IEEE standard. The actual range might be slightly smaller depending on your hardware or operating system.
M is the total number of digits and D is the number of digits following the decimal point. If M and D are omitted, values are stored to the limits permitted by the hardware. A single-precision floating-point number is accurate to approximately 7 decimal places.
UNSIGNED, if specified, disallows negative values.
我想确定 unsigned float
的行为是否类似于 unsigned int
的行为,其中小数点和尾数的完整位深度用于表示正值,或者如果 unsigned float
s 仅防止负值。
I want to determine if the behavior of unsigned float is similar to
the behavior of unsigned int where the the full bit depth of the
decimal and mantissa is used to represent positive values, or
没有。 MySQL 为其 FLOAT
选择使用 IEEE-754 单精度浮点数。 IEEE Float是"sign-magnitude",所以符号位占据了自己的特定位置。 INT
,另一方面,是2的补码编码。因此,符号位既可以解释为符号,也可以解释为值的扩展。 (警告:几乎所有当前的 计算机硬件 都按照本段中描述的方式工作;但可能有一些不是。一个古老的例子:CDC 6600 使用 1 的补码。)
if unsigned floats only prevent negative values.
是的。
必须要说的是:如果您使用的是本质上不精确的 FLOAT
数据类型,您应该仔细考虑为什么您的问题 space 禁止所有负数。这些数字是否忠实地代表了问题 space? FLOAT
的不精确是否可以接受您所代表的内容?
浮点数可以无计算的想法是不切实际的。仅从整数生成它们就涉及计算。是的,是直接在电脑芯片上完成的,但还是计算。
并且,丢包的例子是
- 精确地用两个整数表示:丢失的数据包数/数据包数(如果你愿意,你可以称之为有理数),或者
- 大约由一个 FLOAT 分数表示,该分数是将这些整数中的一个除以另一个得到的。
恕我直言,你想多了。
FLOAT
总是占用 4 个字节,无论附加的选项如何。另一方面,DECIMAL(m,n)
占用 大约 (m/2) 个字节。
FLOAT(m,n)
,估计没用。 n
表示将十进制四舍五入到n位,然后存入二进制数(IEEE Float),从而造成另一四舍五入.
根据 MySQL Numeric types documentation,除其他外,Float 类型具有以下属性:
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
A small (single-precision) floating-point number. Permissible values are -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38. These are the theoretical limits, based on the IEEE standard. The actual range might be slightly smaller depending on your hardware or operating system.
M is the total number of digits and D is the number of digits following the decimal point. If M and D are omitted, values are stored to the limits permitted by the hardware. A single-precision floating-point number is accurate to approximately 7 decimal places.
UNSIGNED, if specified, disallows negative values.
我想确定 unsigned float
的行为是否类似于 unsigned int
的行为,其中小数点和尾数的完整位深度用于表示正值,或者如果 unsigned float
s 仅防止负值。
I want to determine if the behavior of unsigned float is similar to the behavior of unsigned int where the the full bit depth of the decimal and mantissa is used to represent positive values, or
没有。 MySQL 为其 FLOAT
选择使用 IEEE-754 单精度浮点数。 IEEE Float是"sign-magnitude",所以符号位占据了自己的特定位置。 INT
,另一方面,是2的补码编码。因此,符号位既可以解释为符号,也可以解释为值的扩展。 (警告:几乎所有当前的 计算机硬件 都按照本段中描述的方式工作;但可能有一些不是。一个古老的例子:CDC 6600 使用 1 的补码。)
if unsigned floats only prevent negative values.
是的。
必须要说的是:如果您使用的是本质上不精确的 FLOAT
数据类型,您应该仔细考虑为什么您的问题 space 禁止所有负数。这些数字是否忠实地代表了问题 space? FLOAT
的不精确是否可以接受您所代表的内容?
浮点数可以无计算的想法是不切实际的。仅从整数生成它们就涉及计算。是的,是直接在电脑芯片上完成的,但还是计算。
并且,丢包的例子是
- 精确地用两个整数表示:丢失的数据包数/数据包数(如果你愿意,你可以称之为有理数),或者
- 大约由一个 FLOAT 分数表示,该分数是将这些整数中的一个除以另一个得到的。
恕我直言,你想多了。
FLOAT
总是占用 4 个字节,无论附加的选项如何。另一方面,DECIMAL(m,n)
占用 大约 (m/2) 个字节。
FLOAT(m,n)
,估计没用。 n
表示将十进制四舍五入到n位,然后存入二进制数(IEEE Float),从而造成另一四舍五入.