2015-04-26 3 views
-1

Я только начал учиться программированию. У меня вопрос.Не получите правильный объем сферы из моего кода на C?

Я хочу вычислить объем шара из radius.my код:

enter image description here

но это не дает мне правильные анс для 1523.result является 14797486080,000 , но правильные анс будет +14797486501,627 .В чем проблема?

Я нашел проблему здесь https://www.urionlinejudge.com.br/judge/en/problems/view/1011

+9

Пожалуйста, не размещайте изображения. Отправьте код непосредственно путем копирования, а затем форматируйте его как код с помощью CTRL + K. Что касается ответа, попробуйте использовать 'double' вместо' float' –

+0

. Вероятно, проблема заключается в точности поплавка. Вам нужно посмотреть книгу программирования C или учебник. Что касается технического описания: [плавающая точка IEEE] (http://en.wikipedia.org/wiki/IEEE_floating_point). – mins

+0

Не имеет смысла читать радиус как float, используя% f, а не int и% d – rhubarbdog

ответ

2

Ваш расчет выполнен в double и преобразован при назначении на float, поэтому вы теряете точность. Вы, вероятно, просто должны объявить q как double.

Также, если вы действительно обеспокоены точностью, вы должны использовать лучшее приближение π.

+0

Для «желаемого результата» аппроксимация pi как 3.14159 находится на месте. Используя лучший pi, результатом будет 14797499000.5. Поскольку это какое-то упражнение, его автор пошел на повторяемость результата, а не на точность. – usr2564301

1

Если вы хотите лучше точность результата, попробуйте дважды вместо поплавка. 32-битный float даст вам точность около 7 цифр. 64-битный double даст вам точность около 15 цифр.

+0

Нет, неправильно. Все вычисления, которые мы видим здесь, выполняются в 'double'. –

+0

Вычисления выполняются в двойном виде, но представление результирующей переменной q в printf представляет только float с 32-битной точностью. –

0

Возможно, вы просто должны объявить q как double. вы должны использовать лучшее приближение π.

0

Попробуйте использовать это:

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

int main() 
{ 
    int a; 
    double volume; 
    printf("Enter the radius of a sphere: "); 
    scanf("%d", &a); 
    volume=(4.0/3) *3.14159*pow(a,3); 
    printf("Volume of a sphere is: %3f", volume); 
    return 0; 
} 
Смежные вопросы