在 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: