2012-01-02 47 views
3

我需要一個變量a = 6700000^2 * (a - b) (2 + sinf(a)+ s inf(b)),其中ab浮點數在-7到7之間。我需要浮點數可以給我的所有精度。在目標c中進行計算

哪種數據類型應該是a是?是否sinf正確的功能,以獲得最好的精度ab?並且ab應該是弧度還是度數?


好吧我犯了一個錯誤,當我張貼的表達,正確的表達是C = 6700^2 *(AB)(2 + SINF(A)+ SINF(b))和我的問題是一個用c 「a」和「b」是漂浮物,它們以浮標的形式傳給我,它們確實是座標(經度和緯度),所以我不擔心......我擔心在使用sinf時會失去精度嗎?哪種類型應該c,所以我不會失去精度,因爲我使用一個長的雙變量d來存儲多個不同的c變量的總和,d被返回給我,因爲它是零,它不應該(關於1或2)所以我gessing我計算c包裹時失去了一些精度...我使用C作爲一個雙...可以是,我計算C時失去了一些精度?

非常感謝您的幫助。

+1

我懷疑'(6700000)^ 2'會很好玩。 – Blender 2012-01-02 22:59:02

+0

@Blender,只有13個數量級!你的硬盤上有更多的位(可能)。 – Ben 2012-01-02 23:03:52

+0

@Ben:'float'只存儲7個數字。 '雙'只存儲'15'。 – Blender 2012-01-02 23:10:18

回答

1

而不是使用float,如果您不需要擔心內存問題,則應該使用double。請記住,然後將sinf()更改爲sin()並使用弧度。

+0

iOS中的long double和double是相同的(都是IEEE-754 binary-64)。 – 2012-01-03 14:33:54

0

如果您想在不滾動自己的類型的情況下獲得最佳精度,則應該使用double而不是float。在這種情況下,您可以使用sin(3)。根據man page,您應該以弧度傳遞參數。

3

我不能告訴你float是否適合您的應用程序。如果您需要更高精度,請使用double,然後使用sin()而不是sinf()

標準的三角函數以弧度表示角度,因爲如果您閱讀relevant documentation,您會發現它。