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
これらのデータ型は、浮動小数点データ型と呼ばれることがよくあります。これらの数値は、 浮動小数点数 と呼ばれます。
float fvar = 50.15;
ダブル dvar = 50.0;
浮動小数点データ型の比較 - float と double
float データ型と double データ型の違いは、すべて小数点以下の桁数の精度にあります。
VexOS – ARM 7仕様に基づくと、floatは6桁または7桁を処理でき、doubleは15桁または16桁を処理できます。
float: 現在の V5os では、コントローラーは小数点以下 8 桁までの精度を許可しているようです。
例えば
float fvar1 = 1.12345670;
float fvar2 = 1.12345678;
fval1 は fvar2 とは異なります。
対
float fvar1 = 1.123456780;
float fvar2 = 1.123456781;
fval1 は fvar2 と同じように評価されます。
double: 小数点以下 17 桁までの精度を許可します。
例えば
double dvar1 = 1.12345678912345678;
double dvar2 = 1.12345678912345670;
dval1 は dvar2 とは異なります。
対
double dvar1 = 1.123456789123456789;
double dvar2 = 1.123456789123456780;
dval1 は dvar2 と同じように評価されます。
高精度が必要でない限り、「double」は使用しないでください。
高精度が必要な場合を除き、「double」を使用すべきではない理由が 2 つあります。
- 2X フロート型を占めます。
- はるかに高い処理能力を必要とします。
VexOS – ARM 7仕様に基づくと、floatは6桁または7桁まで、doubleは15桁または16桁まで処理できます。いずれの場合も、double または float の最後の桁の精度に依存しないでください。これは、「浮動小数点計算」と呼ばれるもの (この記事の範囲外です) により、「int」の保存とは大きく異なります。
したがって、小数点以下の最後の数桁の精度が失われる可能性があります。
double の演算は float に比べて非常にコストがかかり、浮動小数点計算と呼ばれるものがあるため、「integer」よりもはるかに高くなります。
IEEE 規格に基づいて、以下はより信頼できる範囲内です。
| タイプ | 最小の正の値 | 最大の正の値 | 精度の# |
|---|---|---|---|
| フロート | 10 -38 x 1.17549 | 10 38 x 3.40282 | 6桁 |
| ダブル | 10 -308 または 2.22507 | 10 308 x 1.79769 | 15桁 |
プリミティブ データ型を交換できますか? - キャスティング
データ型を交換することが可能です。この技法を「鋳造」といいます。キャストはかなり一般的な方法ですが、必要な場合にのみ実行してください。
最も一般的な方法の 1 つは、char と int を交換することです。
これは、次の 1 つの例外を除いて、どちらも整数値を表すためです。
- 「int」には 4 バイト (コンパイラによっては 8 バイト) が含まれます。
- 「char」には1バイトのみが含まれます。
それで、例えば
char aVal = 100;
int iVal = aVal; // 暗黙的なキャスト
または
int iVal = (char) aVal; // 明示的なキャスト。
暗黙的な切り捨てに関する注意:
例えば
#include "vex.h"
using namespace vex;
int main() {
// ロボット構成の初期化。取り外さないでください!
vexcodeInit();
int iVal = 128;
文字 aVal = (文字) iVal; // 悪い!!! aValには-128から127までの値しか格納できません。
}もう一つの一般的な方法は、intとfloatを交換することです。
フロート fVal = 5.486;
float 分数 = fVal - (int)fVal; // 5.486 - 5 となります。
暗黙的な切り捨てに関する注意:
例えば
int iVal = 50;
float fVal = iVal / 100;
現在は fVal = 0.5 ではなく 0.0 です。
暗黙的な切り捨てを利用することはまったく問題ありません。これは、シナリオによっては操作の重要な部分となることがよくあります。ただし、この手法が意図的に使用されていることを確認する必要があります。
暗黙的な切り捨てを実行したくない場合は、明示的にキャストを行う必要があります。
- 暗黙的なキャスト:
float fVal = iVal / 100.0; - 明示的なキャスト:
float fVal = (float) iVal / 100