Подтвердить что ты не робот

В чем разница между% g и% f в C?

Я проходил через C-язык программирования K & R. Здесь, в инструкции для печати двойной переменной, написано

printf("\t%g\n", sum += atof(line));

где сумма объявляется двойной. Может кто-нибудь, пожалуйста, помогите мне, когда использовать% g в случае двойного или в случае поплавка и какая разница между% g и% f.

4b9b3361

Ответ 1

См. любое справочное руководство, например справочная страница:

F, F

Двойной аргумент округляется и преобразуется в десятичную нотацию в стиле [-] ddd.ddd, где число цифр после символа десятичной точки равно спецификации точности. Если точность отсутствует, она принимается равной 6; если точность явно равна нулю, символ десятичной точки не появляется. Если появляется десятичная точка, перед ней появляется как минимум одна цифра. (SUSv2 не знает о F и говорит, что представления символьной строки для бесконечности и NaN могут быть доступны. В стандарте C99 указывается "[-] inf" или "[-] бесконечность" для бесконечности, а строка, начинающаяся с "nan 'для NaN, в случае преобразования f и' [-] INF 'или' [-] INFINITY 'или' NAN * 'в случае преобразования F.)

G, G

Двойной аргумент преобразуется в стиле f или e (или F или E для G-преобразований). Точность определяет количество значащих цифр. Если точность отсутствует, выдаются 6 цифр; если точность равна нулю, ее обрабатывают как 1. Стиль e используется, если показатель степени его конверсии меньше -4 или больше или равен точности. Конечные нули удаляются из дробной части результата; десятичная точка появляется только в том случае, если за ней следует хотя бы одна цифра.

Ответ 2

Это оба примера ввода/вывода с плавающей запятой.

% g и% G являются упрощениями научных обозначений float% e и% E.

% g возьмет число, которое может быть представлено как% f (простой float или double) или% e (научная нотация) и возвращает его как меньшее из двух.

Результат вашего оператора печати будет зависеть от значения суммы.

Ответ 3

Как показывает Unwind, f и g предоставляют разные значения по умолчанию.

Грубо говоря, если вы больше заботитесь о деталях того, что будет после десятичной точки, которое я бы сделал с f, и если вы хотите масштабировать большие числа, перейдите к g. Из некоторых пыльных воспоминаний f очень хорош с небольшими значениями, если ваши печатные таблицы чисел, как и все, выстраиваются в линию, но что-то вроде g необходимо, если вы стоите с изменением ваших чисел, которые становятся большими, а ваш макет имеет значение. e более полезно, когда ваши цифры имеют тенденцию быть очень маленькими или очень большими, но не ближе к десяти.

Альтернативой является указание формата вывода, чтобы каждый раз получать одинаковое количество символов, представляющих ваш номер.

Извините за шершавый ответ, но это субъективная вещь, которая только получает жесткие ответы, если количество генерируемых символов важно или точность представленного значения.

Ответ 4

% f и% g делает то же самое. Единственное отличие состоит в том, что% g - более короткая форма% f. То есть точность после десятичной точки больше в% f по сравнению с% g