C 言語で丸め処理を実行する方法

CBeginner
オンラインで実践に進む

はじめに

この実験では、C プログラミングにおける丸め処理の方法を学びます。まず、浮動小数点変数を宣言し、round()floor()ceil() などの各種丸め関数を使用して値を操作します。最後に、丸められた結果を出力して、異なる丸め動作を観察します。

この実験では、C を用いた基本的な算術演算の基本的なスキルをカバーし、浮動小数点数の丸め技術を扱うための堅固な基盤を提供します。

浮動小数点変数の宣言

このステップでは、丸め処理を行うために必須となる、C 言語における浮動小数点変数の宣言と初期化方法を学びます。

まず、浮動小数点変数を使用するための新しい C ファイルを作成しましょう。

cd ~/project
nano rounding.c

次に、以下のコードをファイルに追加します。

#include <stdio.h>

int main() {
    // 浮動小数点変数を宣言
    float num1 = 3.7;
    double num2 = 4.2;

    // 元の値を出力
    printf("元の float 値:%.1f\n", num1);
    printf("元の double 値:%.1f\n", num2);

    return 0;
}

プログラムをコンパイルして実行します。

gcc rounding.c -o rounding
./rounding

実行結果の例:

元のfloat値: 3.7
元のdouble値: 4.2

コードを詳しく見てみましょう。

  • float は単精度浮動小数点数を使用します
  • double は倍精度浮動小数点数を使用します
  • %.1f の書式指定子は、小数点以下 1 桁で数値を表示します
  • num1num2 は小数値で初期化されています

関数 (例:round, floor, ceil) を用いた値の丸め

このステップでは、C 言語における丸め関数を使用して浮動小数点数を操作する方法を学びます。異なる丸め手法を示すために、以前の rounding.c ファイルを修正します。

既存のファイルを開きます。

cd ~/project
nano rounding.c

以前の内容を以下のコードに置き換えます。

#include <stdio.h>
#include <math.h>

int main() {
    // 浮動小数点変数を宣言
    float num1 = 3.7;
    double num2 = 4.2;

    // 異なる関数を使用して値を丸める
    printf("元の値:\n");
    printf("num1: %.1f, num2: %.1f\n\n", num1, num2);

    // round() 関数を使用
    printf("round() 関数:\n");
    printf("round(num1): %.0f\n", round(num1));
    printf("round(num2): %.0f\n\n", round(num2));

    // floor() 関数を使用
    printf("floor() 関数:\n");
    printf("floor(num1): %.0f\n", floor(num1));
    printf("floor(num2): %.0f\n\n", floor(num2));

    // ceil() 関数を使用
    printf("ceil() 関数:\n");
    printf("ceil(num1): %.0f\n", ceil(num1));
    printf("ceil(num2): %.0f\n", ceil(num2));

    return 0;
}

数学ライブラリを使用してプログラムをコンパイルします。

gcc rounding.c -o rounding -lm
./rounding

実行結果の例:

元の値:
num1: 3.7, num2: 4.2

round() 関数:
round(num1): 4
round(num2): 4

floor() 関数:
floor(num1): 3
floor(num2): 4

ceil() 関数:
ceil(num1): 4
ceil(num2): 5

丸め関数のポイント:

  • round(): 最も近い整数に丸める
  • floor(): 最も近い整数以下に丸める
  • ceil(): 最も近い整数以上に丸める
  • コンパイル時に -lm フラグを使用して数学ライブラリをリンクする
  • %.0f の書式指定子は、小数点を含まない整数として表示する

丸められた結果の出力

このステップでは、異なる精度レベルとフォーマットオプションで丸められた結果をフォーマットして出力する方法を学びます。

既存のファイルを開きます。

cd ~/project
nano rounding.c

さまざまな出力技法を示すためにコードを更新します。

#include <stdio.h>
#include <math.h>

int main() {
    // 浮動小数点変数を宣言
    float num1 = 3.7;
    double num2 = 4.2;

    // 異なる出力フォーマットによる丸め
    printf("丸めデモ:\n");

    // 異なる精度で丸めた値を出力
    printf("1. 丸めた値:\n");
    printf("   round(num1) = %.0f\n", round(num1));
    printf("   round(num2) = %.0f\n\n", round(num2));

    // フィールド幅と精度を使用してフォーマット
    printf("2. フォーマットされた丸めた値:\n");
    printf("   幅付き丸めた num1: %5.1f\n", round(num1));
    printf("   幅付き丸めた num2: %5.1f\n\n", round(num2));

    // 整数と浮動小数点数の表現を出力
    printf("3. 整数と浮動小数点数の表現:\n");
    printf("   num1 を整数に変換:%d\n", (int)round(num1));
    printf("   num2 を整数に変換:%d\n", (int)round(num2));

    return 0;
}

プログラムをコンパイルして実行します。

gcc rounding.c -o rounding -lm
./rounding

実行結果の例:

丸めデモ:
1. 丸めた値:
   round(num1) = 4
   round(num2) = 4

2. フォーマットされた丸めた値:
   幅付き丸めた num1:   4.0
   幅付き丸めた num2:   4.0

3. 整数と浮動小数点数の表現:
   num1 を整数に変換: 4
   num2 を整数に変換: 4

主な出力技法:

  • %.0f: 小数点を削除する
  • %5.1f: フィールド幅と精度を設定する
  • (int) による型変換:整数に変換する
  • さまざまな書式指定子で出力の外観を制御する

まとめ

この実験では、floatdouble といった浮動小数点変数の宣言方法、および round(), floor(), ceil() などの丸め関数を用いてこれらの値を操作する方法を学びました。元の値を出力した後、丸め関数を用いて丸められた結果を表示することで、これらの関数の異なる動作と、数値を切り上げ、切り捨て、または最も近い整数に丸める方法を理解できました。