Почему приведенный ниже код C выводит «Разница: 0,000000»? Мне нужно произвести вычисления со многими десятичными знаками в одном из моих университетских заданий, и я не понимаю этого, потому что я новичок в программировании на C. Я использую правильный тип? Заранее спасибо.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
int main() {
long double a = 1.00000001;
long double b = 1.00000000;
long double difference = a-b;
printf("Difference: %Lf", difference);
}
Я попробовал этот код и ожидаю получить результат: «Разница: 0,00000001».





Вы видите 0.000000, потому что %Lf печатает фиксированное количество знаков после запятой, а число по умолчанию равно 6. В вашем случае разница составляет 1 в десятичном знаке 8th, что отображается как 0.000000 при печати до 6 д.п. Либо используйте %Le или %Lg, либо укажите большую точность: %.8Lf.
#include <stdio.h>
int main(void)
{
long double a = 1.00000001;
long double b = 1.00000000;
long double difference = a - b;
printf("Difference: %Lf\n", difference);
printf("Difference: %.8Lf\n", difference);
printf("Difference: %Le\n", difference);
printf("Difference: %Lg\n", difference);
return 0;
}
Обратите внимание на минимальный набор заголовков.
Выход:
Difference: 0.000000
Difference: 0.00000001
Difference: 1.000000e-08
Difference: 1e-08
#include <stdio.h>
int main() {
long double a = 1.000000001;
long double b = 1.000000000;
long double difference = a-b;
printf("Difference: %.9Lf\n", difference);
}
Попробуйте этот код. На самом деле вам нужно указать компилятору, какая точность вам нужна после десятичной точки. Здесь .9 будет печатать 9 цифр после запятой. Вы можете настроить это значение в соответствии с вашими потребностями; просто не превышайте диапазон переменной.
Вместо этого попробуйте
printf("Difference: %.20Lf", difference);. Тогда прочитайте Математика с плавающей запятой сломана?