Как установить точность поплавка

Может кто-нибудь объяснить мне, как выбрать точность с плавающей точкой с помощью функции 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

Это может быть примерно следующие шаги:

  1. Добавьте 0,666666666 с 0,0005 (мы получаем 0,667166666)
  2. Умножьте на 1000 (мы получим 667.166666)
  3. Переведите число в целое число (мы получаем 667)
  4. Сдвиньте его назад, чтобы всплыть (мы получаем 667.0)
  5. Разделите на 1000 (мы получим 0,667)

Спасибо.