Как установить точность поплавка
Может кто-нибудь объяснить мне, как выбрать точность с плавающей точкой с помощью функции C?
Примеры:
theFatFunction(0.666666666, 3)
возвращает 0,667
theFatFunction(0.111111111, 3)
возвращает 0,111
Ответы
Ответ 1
Вы не можете этого сделать, поскольку точность определяется типом данных (т.е. float
или double
или long double
). Если вы хотите округлить его для целей печати, вы можете использовать соответствующие спецификаторы формата в printf()
, то есть printf("%0.3f\n", 0.666666666)
.
Ответ 2
Вы не можете. Точность полностью зависит от типа данных. У вас есть float
и double
и что это.
Ответ 3
Поплавки имеют статическую фиксированную точность. Вы не можете его изменить. То, что вы иногда можете делать, округляется по числу.
См. эту страницу и подумайте о масштабировании по степеням 10. Обратите внимание, что не все числа точно представлены как float.
Ответ 4
Большинство систем следуют стандарту 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
Ответ 5
Точность определяется типом данных (т.е. с плавающей точкой или двойным или длинным двойным).
Если вы хотите округлить его для целей печати, вы можете использовать соответствующие спецификаторы формата в 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
Ответ 6
Это может быть примерно следующие шаги:
- Добавьте 0,666666666 с 0,0005 (мы получаем 0,667166666)
- Умножьте на 1000 (мы получим 667.166666)
- Переведите число в целое число (мы получаем 667)
- Сдвиньте его назад, чтобы всплыть (мы получаем 667.0)
- Разделите на 1000 (мы получим 0,667)
Спасибо.