О точности в C ++ исчислении - PullRequest
0 голосов
/ 25 октября 2011

Я получил прототип функции, которая делает некоторые исчисления (интегралы от гамма-функции) в C ++, и мне нужно преобразовать ее в язык C. Автор использовал переменные типа float с суффиксом f в каждом исчислении. Как эти предложения ...

float a1=.083333333f;
float vv=dif*i/1.414214f;

Программа использует усеченные ряды на многих строках путем умножения некоторых из этих переменных. Мой вопрос таков: разве я не получаю больше точности, если использую переменные двойной точности? Почему суффикс может быть необходим в этом случае? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 25 октября 2011

float, в современных системах, является 32-битным типом с плавающей точкой. double в современных системах - это 64-битный тип с плавающей запятой.

Точность с плавающей запятой намного меньше 64-битной с плавающей запятой, но все еще очень полезна для скорости и потому, что она занимает меньше байтов оперативной памяти.

Теперь с 64-битной системой разница между float и double намного менее заметна, но в прошлом они могли быть действительно разными.

Вы всегда должны находить компромисс между производительностью и точностью: выбор между double и float именно такой: хотите ли вы высокую точность или низкую точность, но лучшую производительность?

В 3D-играх мы обычно используем float, в приложениях исчисления мы обычно используем double.

Посмотрите, подходит ли вам точность double, если нет, я бы посоветовал вам поискать в библиотеке C ++ числа с исключительной точностью, однако, чтобы продолжить наше обсуждение производительности, производительность этих объектов действительно плохая по сравнению с нативной double или float.

0 голосов
/ 25 октября 2011

Вы бы получили больше точности с двойной точностью, и вам не нужен специальный суффикс в C / C ++.Таким образом, ваш код может выглядеть как

  double a1=.083333333;
  double vv=dif*i/1.414214;

Кроме того, вы можете использовать более точные литералы с плавающей запятой, если хотите ... так что добавьте больше «3» и расширьте «1.414214» в своем сердцесодержание.Имейте в виду, однако, что даже удвоения не являются абсолютно точными.

...