在 VEXcode Pro V5 中建立浮點和雙精確度變數

The VEX Visual Studio Code Extension has replaced VEXcode Pro V5, which is now end-of-life.

VEXcode Blocks and VEXcode Text remain actively developed and supported for all VEX platforms.

儲存小數位數字的類型 – float、double

這些資料類型通常稱為浮點資料類型。 這些數字稱為 浮點 數字。

浮點數 fvar = 50.15;
雙 dvar = 50.0;

比較浮點數資料型別 – float 和 double

float 和 double 資料型別之間的差異在於小數位數的精確度。

基於VexOS- ARM 7規範,float可以處理6或7個位置,double可以處理15或16個位置。

float:在目前的V5os中,控制器似乎允許最多8個小數位的精度。

例如

浮點數 fvar1 = 1.12345670;
浮點數 fvar2 = 1.12345678;

fval1 與 fvar2 不同,

浮點數 fvar1 = 1.123456780; 
浮點數 fvar2 = 1.123456781;

fval1 的計算方式與 fvar2 相同。

double:允許最多 17 位元小數精確度。

例如

雙 dvar1 = 1.12345678912345678;
雙 dvar2 = 1.12345678912345670;

dval1 與 dvar2 不同,

雙 dvar1 = 1.123456789123456789;
雙 dvar2 = 1.123456789123456780;

dval1 的計算方式與 dvar2 相同。


除非需要高精度,否則不要使用“double”

除非需要高精度,否則不應該使用“double”有兩個原因:

  1. 它佔用 2X 浮動類型。
  2. 它佔用更高的處理能力。

基於 VexOS – ARM 7 規範,浮點型可以處理 6 或 7 個位置,而雙精度型可以處理 15 或 16 個位置。 無論哪種情況,您都不應該依賴 double 或 float 中最後一位數字的準確性。 由於所謂的「浮點運算」(這超出了本文的範圍),它的儲存方式與儲存「int」非常不同。

因此,您可能會失去最後幾位小數的準確性。

與浮點相比,雙精度操作的成本相當高,並且由於所謂的浮點計算而比“整數”高得多。

根據IEEE標準,以下是在更可靠的範圍內。

類型 最小正值 最大正值 精度#
漂浮 10 -38 ×1.17549 10 38 ×3.40282 6位數字
雙倍的 10 -308 或 2.22507 10 308 ×1.79769 15 位數字

可以互換原始資料型別嗎? - 選角

可以交換資料類型。 這種技術稱為「鑄造」。 雖然強制轉換是一種相當常見的做法,但僅在必要時才這樣做。 

最常見的做法之一是交換 char 和 int。

這是因為它們都表示整數值,但有一個例外: 

  • 「int」包含 4 個位元組(或在某些編譯器中為 8 個位元組)
  • “char”僅包含 1 個位元組。

所以,例如

字元 aVal = 100;
int iVal = aVal; // 隱式轉換

或者

int iVal = (char) aVal; // 顯式轉換。

隱式截斷的注意事項:

例如

代碼nippet3.png

另一種常見的做法是交換 int 和 float
浮點 fVal = 5.486;
浮點分數 = fVal - (int)fVal; //確實是:5.486 - 5

隱式截斷的注意事項:

例如

整數 iVal = 50;
浮點數 fVal = iVal / 100;

現在 fVal = 0.0,而不是 0.5。

利用隱式截斷絕對沒問題,在某些場景下隱式截斷往往是操作的重要組成部分。 但是,您需要確保您在設計時使用了此技術。

如果您不希望發生隱式截斷,則需要進行明確轉換:

  • 隱式轉換: float fVal = iVal / 100.0;
  • 明確轉換: float fVal = (float) iVal / 100

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: