0

我用 C 语言编写了一个小函数,它的工作几乎与标准函数“fcvt”相同。你可能知道,这个函数接受一个浮点数/双精度并创建一个字符串,用 ANSI 字符表示这个数字。一切正常;-)

例如,对于数字 1.33334,我的函数给了我字符串:“133334”并设置了特殊的整数变量 `decimal_part',在这个例子中将是 1,这意味着十进制部分只有 1 个符号,其他都是分数。

现在我很好奇如何执行标准 C 函数“printf”。它可以采用 %a 或 %e 作为格式字符串。让我引用 %e (链接垃圾):

"double" 参数以科学计数法输出

[-]m.nnnnnne+xx

...指数始终包含两位数。

它说:“指数总是包含两位数”。但什么是指数?这是主要问题。还有,如何从我上面的函数或“fcvt”中获得这个“指数”。

4

5 回答 5

2

如果我们扩展 e,这个符号可能会更好地解释:

[-]m.nnnnnn * (10^xx)

所以你有 m 的一位数(从 0 到 9,但如果整个值为 0,它只会是 0)和 n 的几位数字。我想最好用例子来展示:

1 = 1.0000 * 10^0 = 1e0
10 = 1.0000 * 10^1 = 1e1
10000 = 1.0000 * 10^4 = 1e4
0.1 = 1.0000 * 10^-1 = 1e-1

1,419 = 1.419 * 10^3 = 1.419e3
0.00000123 = 1.23 * 10^-5 = 1.23e-5

您可以在 Google 上查找科学记数法,但它对于表示非常大或非常小的数字很有用,例如 1232100000000000000 将是 1.2321e24(我实际上没有数过,指数可能不准确)。

在 C 语言中,我认为您实际上可以从前 12 位中提取指数(第一个是您必须忽略的符号)。请参阅:IEEE758-1985 浮点

于 2009-05-28T13:51:11.373 回答
0

指数是 10 的幂次幂,然后乘以底数。

SI 在 wikipeida 上进行了解释。http://en.wikipedia.org/wiki/Scientific_notation

m.nnnnnne+xx逻辑上等于m.nnnnnn * 10 ^ +xx

于 2009-05-28T13:47:37.620 回答
0

400 = 4 * 10 ^ 2

2 是指数。

于 2009-05-28T13:48:06.920 回答
0

在科学记数法中,指数是 XX 的 10 次方,因此 1234.5678 可以表示为 1.2345678E03,其中归一化形式乘以 10^3 得到“真实”答案。

于 2009-05-28T13:49:59.613 回答
0

如果你用科学记数法写一个数字,那么指数就是该记数法的一部分。

你可以在这里看到完整的描述http://en.wikipedia.org/wiki/Scientific_notation,但基本上它只是另一种写数字的方式,通常用于非常大或非常小的数字。

假设您有数字 300,它等于 3 * 100,或科学计数法中的 3 * 10^2。

如果你使用 %e 它将被打印为 3.0e+02

于 2009-05-28T13:55:00.133 回答