Float to String: что такое экспоненциальная часть?

Я написал небольшую функцию на C, которая делает почти то же самое, что и стандартная функция `fcvt'. Как вы, возможно, знаете, эта функция принимает число с плавающей запятой/двойное число и создает строку, представляющую это число в символах ANSI. Все работает ;-)

Например, для числа 1.33334 моя функция дает мне строку: "133334" и устанавливает специальную целочисленную переменную `decimal_part', в этом примере будет 1, что означает в десятичной части только 1 символ, все остальное дробь.

Теперь мне любопытно, что делать со стандартной функцией C `printf'. Он может принимать %a или %e в качестве строки формата. Позвольте мне процитировать для %e (ссылка удалена):

"двойной" аргумент выводится в экспоненциальном представлении

[-]м.нннннн+хх

... Показатель степени всегда содержит две цифры.

В нем говорилось: «Показатель степени всегда содержит две цифры». Но что такое экспонент? Это главный вопрос. А также, как получить этот «показатель степени» из моей функции выше или из «fcvt».


person Community    schedule 28.05.2009    source источник


Ответы (5)


Обозначение может быть лучше объяснено, если мы расширим 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, но она полезна для выражения очень больших или малых чисел, например, 12321000000000000000 будет 1,2321e24 (на самом деле я не считал, показатель степени может быть неточным).

Я думаю, что в C вы можете извлечь экспоненту из старших 12 бит (первый — это знак, который вам придется игнорировать). См.: IEEE758-1985 с плавающей запятой

person CookieOfFortune    schedule 28.05.2009

Показатель степени - это степень 10, возведенная в степень, затем умноженная на основание.

СИ объясняется в википедии. http://en.wikipedia.org/wiki/Scientific_notation

m.nnnnnne+xx логически равно m.nnnnnn * 10 ^ +xx

person Daniel A. White    schedule 28.05.2009

В научной записи показатель степени равен десяти в XX степени, поэтому 1234,5678 можно представить как 1,2345678E03, где нормализованная форма умножается на 10 ^ 3, чтобы получить «настоящий» ответ.

person Steve Moyer    schedule 28.05.2009

400 = 4 * 10 ^ 2

2 - показатель степени.

person CannibalSmith    schedule 28.05.2009

Если вы записываете число в экспоненциальном представлении, то показатель степени является частью этого обозначения.

Вы можете увидеть полное описание здесь http://en.wikipedia.org/wiki/Scientific_notation. , но в основном это просто еще один способ записи числа, обычно используемый для очень больших или очень маленьких чисел.

Скажем, у вас есть число 300, равное 3 * 100 или 3 * 10 ^ 2 в экспоненциальном представлении.

Если вы используете %e, он будет напечатан как 3.0e+02.

person Andre Miller    schedule 28.05.2009