1

私は STM8 マイクロ コントローラー用の Cosmic C コンパイラーを使用し、float 変数を使用しています。現在使用されているプラ​​ットフォームでは、コンパイラは double 型を提供しません。とにかく、double を使用すると float として扱われます。

fabs() などを使用する場合、float を double に型キャストする必要があるのでしょうか? 次のように宣言されていますdouble fabs(double x);

これに関するコンパイラのドキュメントには何も見つかりませんでした。

ただし、型キャストがなくても、警告なしでコンパイルされます。ちなみに、double と float を混同すると、GCC も警告なしでコンパイルされます。

4

1 に答える 1

0

数値昇格

ある型の値がより大きな同様のデータ型の値に変換されるときはいつでも、これは数値昇格 (または拡大、ただしこの用語は通常整数用に予約されています) と呼ばれます。たとえば、int を long に拡張したり、float を double に拡張したりできます。

1 2 長さ l(64); // 整数 64 を long double d(0.12f) に拡張します。// float 0.12 を double に昇格する 「数値昇格」という用語はあらゆるタイプの昇格をカバーしますが、C++ では特定の意味を持つ他の 2 つの用語があります。

整数昇格には、int よりも狭い整数型 (bool、char、unsigned char、signed char、unsigned short、signed short を含む) の整数 (可能な場合) または unsigned int への変換が含まれます。浮動小数点昇格には、float から double への変換が含まれます。整数昇格と浮動小数点昇格は、小さなデータ型を int/unsigned int または double に変換する特定のケースで使用されます。これらのデータ型は通常、操作を実行するのに最もパフォーマンスが高いためです。

プロモーションについて覚えておくべき重要なことは、プロモーションは常に安全であり、データが失われないということです。

ソース:

http://www.learncpp.com/cpp-tutorial/44-implicit-type-conversion-coercion/

于 2016-09-07T11:32:33.220 に答える