簡體   English   中英

C程序給出與計算器不同的答案

[英]C program giving different answer than calculator

我正在嘗試用KN King的C編程現代方法進行此練習,但不確定自己在做什么錯。 作者網站上沒有正確的答案。 這是問題:

http://i.imgur.com/kgFD9pN.png

寫,計算與10米半徑的球體的體積,用公式V = 4/33πR的程序。 將分數4/3寫為4.0f / 3.0f。 (嘗試將其寫為4/3。會發生什么?) 提示: C沒有指數運算符,因此您需要將r自身相乘兩次才能計算出r 3

注意正確的輸出(由(4/3)* 3.14 * 1000給出)是4186.6666 ... 67,但是我的代碼輸出41866.667969。 我認為這是由於數據類型引起的舍入錯誤(至少從我從這個問題/答案中得出的結論來看, 為什么C給我的答案不同於我的計算器?

這是我的代碼:

//Sphere computation
//Formula = v= 4.0f / 3.0f * 3.14 (pi) * r^3 (a = r*r, b = a*a)

#include <stdio.h>

int main(void)
{
    float volume, pi, fraction, radiusOne, radiusSquared, radiusCubed;

    radiusOne = 10.0f;
    pi = 3.14f;
    fraction = 4.0f / 3.0f;

    radiusSquared = radiusOne * radiusOne;
    radiusCubed = radiusSquared * radiusSquared;
    volume = fraction * pi * radiusCubed;

    printf("Volume: %f\n", volume);

    return 0;
}

您的答案相差十,因為這兩行不正確:

radiusSquared = radiusOne * radiusOne;
radiusCubed = radiusSquared * radiusSquared;

因為R 2 * R 2 = R 4 ,所以計算R 4而不是R 3

你可能想寫

radiusSquared = radiusOne * radiusOne;
radiusCubed = radiusSquared * radiusOne;

您可以使用pow(R, 3)來計算答案,或者簡單地使用radiusCubed = radiusOne * radiusOne * radiusOne

嘗試更改此:

radiusCubed = radiusSquared * radiusSquared;  //This makes it to the power of 4

radiusCubed = radiusSquared * radiusOne;    //This makes it to the power of 3

要么

radiusCubed = radiusOne * radiusOne * radiusOne;   //This makes it to the power of 3

你寫

radiusSquared = radiusOne * radiusOne;
radiusCubed = radiusSquared * radiusSquared;

給定radiusOne初始化為10,radiusSquared將為100。然后,將其自身乘以乘積,將得出結果,radiusCubed將為10,000,而不是應為1,000。

使用此代替:

radiusCubed = radiusOne * radiusOne * radiusOne;

問題在哪里說

您需要將r自身相乘兩次

這意味着后一種形式,而不是您應該將其自身乘以然后再將結果自身乘以。

舍入問題的一部分確實與您的問題中的鏈接有關-使用雙精度浮點而不是單精度幾乎可以消除這種情況。 其他舍入問題源於您使用3.14作為pi的近似值,而不是任何更精確的值。 正確使用的值是math.h定義的值

#define M_PI 3.14159265358979323846

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM