Определяя константы с плавающей точкой, сколько цифр полезно? - PullRequest
2 голосов
/ 16 февраля 2012

Когда я определяю константы в C, которые не могут быть точно представлены в десятичной системе, скажем, например, π, сколько цифр будет учтено компилятором для фактического создания float или double в памяти?

Например:

/* Overkill? */
const float PI_F = 3.1415926535897932384626433832795f;

/* Too few digits? */
const double PI_D = 3.14159;

Ответы [ 4 ]

2 голосов
/ 16 февраля 2012

Используйте столько цифр, сколько сможете (в разумных пределах: ваш поплавок PI_F выше в порядке). Если данных больше, чем может содержать тип, компилятор удалит лишние данные; а если будет меньше, вы будете рады написать все, что знали.

2 голосов
/ 16 февраля 2012

Если предположить Стандартные числа IEEE 754 с плавающей запятой , которые сегодня являются обычным явлением, вы получаете примерно 7,22 цифры точности для float и 15,95 для double, поэтому стремитесь к 7 цифрам после десятичнойукажите для float π константы и 15 для double, чтобы быть на безопасной стороне.128-бит long double дает точность 34,02, поэтому 33 знака после десятичной точки в π. (*)

Однако избыточная точность не повредит, компилятор просто обрежет ее.

(*) Обратите внимание, что long double довольно часто не является форматом IEEE;x86-32 обычно имеет 80-битный, а не 128-битный long double.В MSVC это очевидно синоним для double, поэтому 64-битный.

0 голосов
/ 28 декабря 2012

«Нормальные» математические константы определены в заголовке C, как M_PI и тому подобное. Для них лучше всего использовать вашу системную стоимость. Для других; если они достаточно дешевы для вычисления / аппроксимации, сделайте это в своей программе для обеспечения надежности или вычислите их вне линии для достижения (чуть больше) необходимой точности и скопируйте значение.

Кстати, для почти всех «реальных» применений 3 или 4 цифры достаточно точности, не стоит слишком беспокоиться по этому поводу.

0 голосов
/ 16 февраля 2012

Предполагая, что у вас есть 32-разрядные числа с плавающей запятой и 64-разрядные числа с двойным числом, "Число с плавающей запятой подходит для 6-значной точности, но двойные числа предлагают 15."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...