ホームページ >バックエンド開発 >C++ >C には `round()` 関数がありませんか?それはどのように実装できますか?

C には `round()` 関数がありませんか?それはどのように実装できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-23 06:46:14859ブラウズ

Is C   Missing a `round()` Function, and How Can It Be Implemented?

C での浮動小数点丸め :round() の不在

ceil() や Floor() のような関数は C で利用可能ですが、 math.h は浮動小数点数を丸めるためのものですが、標準 C ライブラリには専用のround() 関数がありません。このため、round() が欠落しているのか、それとも C 98 標準で別の名前で存在しているだけなのかという疑問が生じています。

カスタムround() 関数の実装

round() はネイティブに提供されていないため、ユーザーは独自の実装を作成することに頼っていました。四捨五入法に基づくそのような実装の 1 つは次のとおりです。

double round(double d) {
  return floor(d + 0.5);
}

ただし、この実装では、正確に数値を切り上げるため、常に望ましい結果が得られるとは限らないことに注意することが重要です。整数から最も近い偶数の整数までは 0.5 離れています。

代替丸めメソッド

round-to-even など、他の丸め方法も存在します。これは、偏りの少ない丸めアプローチを提供し、大量の丸めに推奨されます。

C 11

幸いなことに、C 11 では、次のような組み込みのround()関数が導入されました。 std::round、std::lround、および std::llround。さまざまなデータ型に標準の丸め動作を提供します。これらの関数は、カスタム ソリューションよりも堅牢で効率的な実装を提供します。

以上がC には `round()` 関数がありませんか?それはどのように実装できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。