Двойная точность в C - печать 50 значащих цифр дает неточные значения - PullRequest
3 голосов
/ 19 октября 2011

Я делаю интеграционную программу с суммами Римана для моего класса Calculus.Я решил использовать C при вычислении моих интегралов, и я заметил огромную ошибку в моей программе, которая возникает из-за этой проблемы.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char** argv) {

double x = 2.0/20.0;
printf("%1.50f \n", x);


return (EXIT_SUCCESS);
}    

Программа дает мне: 0.10000000000000000555111512312578270211815834045410.Мой вопрос: почему это происходит?И как я могу это исправить?Или хотя бы округлить до ~ 15 десятичных знаков?

Спасибо за помощь.

Ответы [ 2 ]

7 голосов
/ 19 октября 2011

Основы с плавающей точкой:

http://en.wikipedia.org/wiki/Floating_point

Ответ в вашем случае 0.10 не совсем точно представлен в двоичной переменной с плавающей точкой. Таким образом, это только с точностью до 16 цифр. И все же вы пытаетесь распечатать его до 50 десятичных знаков.

1 голос
/ 19 октября 2011

Если вам нужны более точные результаты, чем то, что может предложить double, вы можете проверить некоторые из доступных библиотек произвольной точности .

...