2013-11-27 6 views
0

Я собираюсь рассчитать двойной тип с точностью до десяти десятичных точек. конечно, я надеюсь, что результат precesion имеет такую ​​же десятизначную точность. Однако он не работает, только 6 десятичных точек возможны в VS2008. Есть ли какая-то причина или какая-либо идея?Как вычислить двойную переменную с 10 десятичной точностью в C++

double dMag = 10; 
double dPixelSize = 4.4; 
double PixelWidth = 1024/2; 
double PixelHeight = 768/2; 
double umtomm = 1000; 

double origin_PosX = 813.227696; 
double origin_PosY = 676.195748; 

double PosX = (origin_PosX - PixelWidth) * dPixelSize/dMag/umtomm; 
double PosY = (origin_PosY - PixelHeight) * dPixelSize/dMag/umtomm; 

Если я проверил PosX и PosY, тогда результаты будут «0.132540, 0.128566» соответственно. Я ожидаю, что результаты будут «0.13254018624000002, 0.12856612912» соответственно.

благодаря

+0

Как вы проверяете результаты? Отладчик может не показывать полную точность этих чисел. – woolstar

+0

Сохраненный файл результатов. то я проверил. –

+0

С fprintf? – woolstar

ответ

3

Из того, что я понимаю, вы смешиваете несколько вещей ...

Точность double больше всего 6 знаков после запятой. Я настоятельно рекомендую прочитать this wikipedia article, в котором объясняется, как базовый тип данных double хранит ваш номер и объясняет его точность.

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

В комментариях вы упомянули, используя

tmp1.Format("%f,%f\r\n", PosX, PosY); file.Write(tmp1,lstrlen(tmp1)); 

для печати строк.

Попробуйте изменить эту строку

tmp1.Format("%.10f,%.10f\r\n", PosX, PosY); file.Write(tmp1,lstrlen(tmp1)); 

, и вы увидите, что он будет печатать 10 цифр после запятой.

Смежные вопросы