Может кто-нибудь объяснить мне, как выбрать точность с плавающей точкой с помощью функции C?
Примеры:
theFatFunction(0.666666666, 3)
возвращает 0,667
theFatFunction(0.111111111, 3)
возвращает 0,111
Может кто-нибудь объяснить мне, как выбрать точность с плавающей точкой с помощью функции C?
Примеры:
theFatFunction(0.666666666, 3)
возвращает 0,667
theFatFunction(0.111111111, 3)
возвращает 0,111
Вы не можете этого сделать, поскольку точность определяется типом данных (т.е. float
или double
или long double
). Если вы хотите округлить его для целей печати, вы можете использовать соответствующие спецификаторы формата в printf()
, то есть printf("%0.3f\n", 0.666666666)
.
Вы не можете. Точность полностью зависит от типа данных. У вас есть float
и double
и что это.
Поплавки имеют статическую фиксированную точность. Вы не можете его изменить. То, что вы иногда можете делать, округляется по числу.
См. эту страницу и подумайте о масштабировании по степеням 10. Обратите внимание, что не все числа точно представлены как float.
Большинство систем следуют стандарту IEEE-754 с плавающей запятой, который определяет несколько типов с плавающей точкой.
В этих системах обычно float
является типом одиночной точности IEEE-754 binary32
: он имеет 24-битную точность. double
- тип двойной точности binary64
; он имеет 53-битную точность. Точность номеров бит определяется стандартом IEEE-754 и не может быть изменена.
Когда вы печатаете значения типов с плавающей запятой, используя функции семейства fprintf
(например, printf
), точность определяется как максимальное количество значащих цифр и по умолчанию устанавливается в 6 цифр. Вы можете изменить точность по умолчанию с помощью .
, за которой следует десятичное число в спецификации преобразования. Например:
printf("%.10f\n", 4.0 * atan(1.0)); // prints 3.1415926536
тогда
printf("%f\n", 4.0 * atan(1.0)); // prints 3.141593
Точность определяется типом данных (т.е. с плавающей точкой или двойным или длинным двойным).
Если вы хотите округлить его для целей печати, вы можете использовать соответствующие спецификаторы формата в printf(), т.е.
printf("%0.3f\n", 0.666666666) //will print 0.667 in c
Теперь, если вы хотите округлить его для вычисления целей, вам нужно сначала умножить float на 10 ^ число цифр, а затем typecast на int, выполнить вычисление, а затем снова придать тип float и разделить на ту же мощность 10
float f=0.66666;
f *= 1000; // 666.660
int i = (int)f; // 666
i = 2*i; // 1332
f = i; // 1332
f /= 1000; // 1.332
printf("%f",f); //1.332000
Это может быть примерно следующие шаги:
Спасибо.