1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語とpythonの実行速度の違い

Last updated at Posted at 2024-12-25

C言語とpythonの実行速度の違い

始めに

C言語にある程度慣れてきてほかの言語にも興味が出てきてどんな違いがあるか気になって調べると、難易度やらどんな時に使うかなどが出てきましたが、実行速度の違いがありました。どれくらい違うのか気になったので調べてみたいと思います。

コンパイル言語とインタプリタ言語

そもそも、プログラミング言語は2種類に分類できます。
c言語はコンパイル言語と呼ばれる言語です。コンパイル言語とは、プログラムコードを実行可能な形式に変換するために、コンパイラと呼ばれるツールを使用するプログラミング言語のことを言います。プログラミング演習の時間にたくさん使った gcc 〇〇.c -o 〇〇がコンパイル作業です。
一方で、Pythonはインタプリタ言語と呼ばれる言語です。インタプリタ言語とは、ソースコードを実行時に一行ずつコンパイルしながら実行するプログラミング言語のことを言います。

実行速度

c言語とPythonはそれぞれコンパイル言語とインタプリタ言語であることがわかりましたが、では実行速度の違いはどうでしょうか?
結論から言うとc言語のほうが速いです。上で記述したように、コンパイル言語は実行前にインタプリタ言語は実行中にコンパイルします。なので、先にコンパイルしているコンパイル言語のほうが速く実行できます。英語の長文を日本語で翻訳してから読んで理解するのと、英語のまま読んで理解するのでは前者のほうが理解するのが速いのと同じです。

実際にやってみた

c言語野ほうが実行速度が速いと思っても本当に早いのか?実際にやってみたいと思います。そもそもどうやって計るのか?思いつかなかったのでCHATGPTに聞いてみました。そしたらあるコードが返ってきました。

C言語
#include <stdio.h>
#include <math.h>
#include <time.h>

int is_prime(int n) {
    if (n <= 1) return 0;
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) return 0;
    }
    return 1;
}

int count_primes(int limit) {
    int count = 0;
    for (int num = 0; num < limit; num++) {
        if (is_prime(num)) count++;
    }
    return count;
}

int main() {
    clock_t start_time, end_time;
    start_time = clock();
    int prime_count = count_primes(100000);
    end_time = clock();

    printf("Found %d primes.\n", prime_count);
    printf("Time taken: %f seconds\n", (double)(end_time - start_time) / CLOCKS_PER_SEC);
    return 0;
}

Python
import time

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

def count_primes(limit):
    count = 0
    for num in range(limit):
        if is_prime(num):
            count += 1
    return count

start_time = time.time()
prime_count = count_primes(100000)
end_time = time.time()

print(f"Found {prime_count} primes.")
print(f"Time taken: {end_time - start_time} seconds")

何のコードかというと、0から100,000までの素数をカウントしてそれにかかった処理速度を表示するというプログラムです。
とりあえずやってみようと思ってDebianで試してみました。

PYthonの結果
Found 9592 primes.
Time taken: 0.10423851013183594 seconds

1行目が素数の個数で下が処理にかかった時間です。なるほどと思いながら、次はc言語のほうもやってみました。

c言語
Found 9592 primes.
Time taken: 0.010333 seconds

素数の個数は同じで、かかった時間はなんと桁が一つ違う結果になりました。コードがもっと長くなれば実行時間の差がもっとはっきりわかると思います。

それもやってみたいですが、論理回路と電気電子回路の試験もあるのでまた別の機会に、、、

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?