ホームページ > バックエンド開発 > C++ > C/C には浮動小数点数に対する標準の符号関数がありますか?

C/C には浮動小数点数に対する標準の符号関数がありますか?

Susan Sarandon
リリース: 2024-12-16 12:58:11
オリジナル
938 人が閲覧しました

Does C/C   Have a Standard Sign Function for Floating-Point Numbers?

C/C には標準の符号関数はありますか?

質問:

I負の数の場合は -1、正の数の場合は 1 を出力する関数を探しています。その単純さにもかかわらず、この機能はどこかの標準ライブラリで利用できるのではないかと思います。具体的には、float データ型を操作する関数が必要です。

答え:

はい、この目的を果たす、signum と呼ばれる標準 C 関数があります。ただし、この関数はタイプセーフであることに注意することが重要です。つまり、float だけでなくさまざまなデータ型を操作できることを意味します。次に、signum の一般的な実装を示します。

template <typename T>
int sgn(T val) {
    return (T(0) < val) - (val < T(0));
}
ログイン後にコピー

この関数には、カスタム実装に比べていくつかの利点があります。

  • 正確な Signum の実装: 負の場合は -1 を返します。数値、0 はゼロ、1 は正
  • 型の汎用性: 整数、浮動小数点数、倍精度浮動小数点数、およびその他のさまざまなデータ型を操作できます。
  • 効率: ブランチレス実装例外的な処理のためにコンパイラの最適化を利用しますパフォーマンス。

使用法:

int sign = sgn(-1.5); // -1
sign = sgn(0.0);      // 0
sign = sgn(3.14);     // 1
ログイン後にコピー

注意事項:

  • コンパイル時間: テンプレートとして使用すると、コンパイル時間が長くなる可能性があります特定のシナリオでは。
  • 型破りな構文: copysign は、sign 関数を正確に実装していないにもかかわらず、標準ライブラリ関数であるため、copysign の使用を好む人もいるかもしれません。
  • 警告のトリガー: 符号なし型で使用すると、次の "-Wtype-limits" 警告がトリガーされる可能性があります。 GCC。これに対処するには、オーバーロードを使用したテンプレートの特殊化を採用できます。

結論として、関数 Signum は、C で数値の符号を決定するための多用途かつ効率的なソリューションを提供します。標準ライブラリの浮動小数点数には直接使用できない場合がありますが、タイプセーフな実装により、幅広いデータ型で驚くべき精度で使用できます。

以上がC/C には浮動小数点数に対する標準の符号関数がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート