计算一个浮点数的位数
Count the number of digits of a floating-point number
是否有任何有效的方法(无需将浮点数转换为字符串)来获取浮点数的位数(与其长度和精度无关)?
通过这种方式,我可以通过将浮点数乘以它所包含的位数来为 comparison/conditioning 实现一个相当不错的、可移植的、问题较少的函数。
问:有什么有效的方法可以获取浮点数的位数吗?
A:我怀疑。
每个有限的 FP 数都是精确,但可能不是人们认为的精确值。
由于 double
、
的典型 binary64 实施
double x = 0.53
, x
值: .5300000000000000266453525910037569701671600341796875
, 52 位。
double x = 0.1
, x
值:.1000000000000000055511151231257827021181583404541015625
55 位.
下一个最接近数学 0.1
的 double
是 .09999999999999999167332731531132594682276248931884765625
,有 56 位数字。
DBL_MAX
:十进制,通常约 300 位 17976931348623158...
以 6728515625.
结尾。
DBL_MIN
:通常是 0.000000(~300 zeros) 22250738585072014... (maybe about 700 more digits)
。
FP数的比较不需要确定其十进制表示中的位数。要比较 FP 数,请使用常用的关系运算符 >, >=, ==
,等等
这些值是说明性的。 YMMV.
是否有任何有效的方法(无需将浮点数转换为字符串)来获取浮点数的位数(与其长度和精度无关)?
通过这种方式,我可以通过将浮点数乘以它所包含的位数来为 comparison/conditioning 实现一个相当不错的、可移植的、问题较少的函数。
问:有什么有效的方法可以获取浮点数的位数吗?
A:我怀疑。
每个有限的 FP 数都是精确,但可能不是人们认为的精确值。
由于 double
、
的典型 binary64 实施
double x = 0.53
, x
值: .5300000000000000266453525910037569701671600341796875
, 52 位。
double x = 0.1
, x
值:.1000000000000000055511151231257827021181583404541015625
55 位.
下一个最接近数学 0.1
的 double
是 .09999999999999999167332731531132594682276248931884765625
,有 56 位数字。
DBL_MAX
:十进制,通常约 300 位 17976931348623158...
以 6728515625.
结尾。
DBL_MIN
:通常是 0.000000(~300 zeros) 22250738585072014... (maybe about 700 more digits)
。
FP数的比较不需要确定其十进制表示中的位数。要比较 FP 数,请使用常用的关系运算符 >, >=, ==
,等等
这些值是说明性的。 YMMV.