2014-10-22 2 views
-2

Есть ли способ, чтобы моя функция возвращала числа с точностью до 15 знаков после запятой?Возвращаемое значение с большим количеством знаков после запятой

long double vzdalenost(long double a1,long double b1,long double a2,long double b2){ 
    long double vzdal; 
    vzdal = ((b1-a1)*(b1-a1)+(b2-a2)*(b2-a2)); 
    return((long double) vzdal); 
} 

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

+0

Какие входные данные? Как вы показываете результат? Почему бы не разделить уравнение? –

+0

входы Ф.О. например: a1 = -22,377747538360609 b1 = -51,454193488687750 a2 = -58,646739603368303 b2 = -105,715910905586099 Я не отображает результат в любом случае. Я просто использую результат, чтобы сравнить его с другими числами. – Ellesar

+0

Если вы не видите результатов, то откуда вы узнали, что у вас есть только 6 десятичных знаков? – UnholySheep

ответ

5

По умолчанию printf отображает 6 значимых десятичные, для отображения 15 Используйте . спецификатор точности:

printf("%.15f\n", 1.0/3.0); 

(или, как представляется, вы используете long double значения: printf("%.15Lf\n", 1.0L/3.0L);).

+0

Нет ни малейшего указания на то, что OP использует 'printf' или вечернюю печать. –

+3

@BlueMoon - это * значение возврата имеет только 6 знаков после запятой *. 64-разрядная «двойная» IEEE-754 имеет приблизительно 15 десятичных цифр точности. – ouah

+0

Комментарий OP говорит: * Я не показываю результат каким-либо образом. * –