Floating point 什么时候对IEEE浮点数使用科学符号?

Floating point 什么时候对IEEE浮点数使用科学符号?,floating-point,numbers,ieee-754,scientific-notation,Floating Point,Numbers,Ieee 754,Scientific Notation,我正在开发一个应用程序,它提供一个HMI,可以显示从远程源读取的值。应用程序不知道这些值本身意味着什么——这是由最终用户配置的 支持的类型之一是32位浮点(IEEE单精度)。由于IEEE浮点只能具有有限的精度,当表示非常大或非常小的值(例如12312984124000000000000000000000、.0000000000000000000000 32423894)时,有许多数字不传递任何附加信息。在这些情况下,为了清晰起见,我想转而使用科学符号 问题是:考虑到IEEE 32位浮点的精度和特

我正在开发一个应用程序,它提供一个HMI,可以显示从远程源读取的值。应用程序不知道这些值本身意味着什么——这是由最终用户配置的

支持的类型之一是32位浮点(IEEE单精度)。由于IEEE浮点只能具有有限的精度,当表示非常大或非常小的值(例如12312984124000000000000000000000、.0000000000000000000000 32423894)时,有许多数字不传递任何附加信息。在这些情况下,为了清晰起见,我想转而使用科学符号


问题是:考虑到IEEE 32位浮点的精度和特性,是否有定义良好的算法来确定何时进行切换?理想情况下,当值的十进制表示形式包含无意义的数字时,会发生这种情况。

由于
浮点值约有7个有效数字,如果log10(abs(x))>7或log10(abs(x))<-7,则应切换到科学记数法

更新:

由于float仍然具有二进制格式,因此最好关注二进制值。它有23个有效的二进制数字,因此您可以检查

abs(x)>223,abs(x)<2-23


在C语言中,你可以使用(1)我发现Java在默认情况下会转换为科学格式,用于x<10^-3和x>10^7()。上限值有意义,但我想知道下限值。他们可能认为数字0.000123看起来不如1.23^10-4。好的,这正是我需要的。浮点值应该有24位精度(有点含蓄)所以也许我应该用2^24和2^-24来代替。但这肯定回答了我的问题。