Как я могу ввести небольшое число с большим количеством значащих цифр в программу C? - PullRequest
3 голосов
/ 17 марта 2010

Я не особо разбираюсь в программировании и пытаюсь выяснить, как получить точное значение, рассчитанное в программе на Си. Мне нужна постоянная сила от минуса 7, с 5 значащими цифрами. Любые предложения (учитывая, что я знаю очень мало, никогда не программировал ни на что, кроме c и только во время обязательных курсов, которые я проходил много лет назад в школе)?

Спасибо!

Ответы [ 5 ]

3 голосов
/ 17 марта 2010

Вы можете получить высокоточную математику из специализированных библиотек, но если все, что вам нужно, это 5 значащих цифр, то встроенные типы float и double подойдут. Пойдем с double для максимальной точности.

Отрицательная сила 7 th всего на 1 больше вашего числа до мощности 7 th , так что ...

double k = 1.2345678;  // your constant, whatever it is
double ktominus7 = 1.0 / (k * k * k * k * k * k * k);

... и все тут!

Если вы хотите распечатать значение, вы можете сделать что-то вроде

printf("My number is: %9.5g\n", ktominus7);
2 голосов
/ 17 марта 2010

Для постоянного значения требуемый расчет также будет постоянным. Поэтому я рекомендую вам рассчитать значение с помощью [настольного калькулятора / MATLAB / other] и затем жестко закодировать его в своем коде C.

1 голос
/ 17 марта 2010

В сфере компьютерных форматов с плавающей запятой пять значащих цифр - это не много. 32-битный тип с плавающей точкой IEEE-754, используемый для float в большинстве реализаций C, имеет точность 24 бита, что составляет около 7,2 десятичных цифр. Таким образом, вы можете просто использовать с плавающей точкой без страха. double обычно имеет точность 53 бита (почти 16 десятичных цифр). Ответ Карла Смотрица хорош, но в Си есть также функция pow, которую можно передать -7.0.

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

0 голосов
/ 17 марта 2010

long double обеспечивает наилучшую точность в большинстве случаев и может быть статически распределена и использована повторно, чтобы свести к минимуму потери. См. Также Четверная точность . Оба меняются от платформы к платформе. Четверная точность говорит о том, что самый левый бит (1) продолжает определять подпись, а следующие 15 бит определяют показатель степени. IEEE 754 (то есть двоичные 128), если предоставленных ссылок недостаточно, все они возвращаются к long double:)

Простое переключение должно позаботиться обо всем остальном, если я вас правильно понял?

0 голосов
/ 17 марта 2010

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

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