به محفل ریاضی ایرانیان خوش آمدید! لطفا برای استفاده از تمامی امکانات عضو شوید
ارسال شده آبان ۵, ۱۴۰۰ در مطالب ریاضی توسط UnknownUser (1,608 امتیاز)
برچسب گذاری دوباره آبان ۲۱, ۱۴۰۱ توسط AmirHosein
768 بازدید

به نام خدا

یادگیری و استفاده از زبان‌های برنامه‌نویسی، در انجام محاسبات ریاضی کمک زیادی می‌کند. دو زبان برنامه‌نویسی پرکاربرد در انجام محاسبات ریاضی، پایتون (Python) و سی‌پلاس‌پلاس (++C) هستند؛ اما بنده می‌خواستم برای انجام محاسبات ریاضی، یکی از این دو زبان که سریع‌تر هستند را انتخاب کنم. برای همین، خودم شخصاً مقایسه‌ای بین سرعت این دو زبان برنامه‌نویسی انجام دادم و از نتیجۀ این مقایسه، بسیار شگفت‌زده شدم!


ابتدا، کدی به‌زبان برنامه‌نویسی سی‌پلاس‌پلاس نوشتم که شمارنده‌های طبیعی یک عدد را به‌دست می‌آورد و نمایش می‌دهد:

#include <iostream>
using namespace std;
int main(){
    int n;
    cout << "Enter any Number: ";
    cin >> n;
    int i=1;
    while (i <= n){
        if (n%i==0){
            cout << i << endl;
            i++;
        }
        else{
            i++;
        }
    }
    return 0;
}

و بعد دقیقاً همین کد را به‌زبان برنامه‌نویسی پایتون، باز نویسی کردم:

n = int(input("Enter any Number: "))
i = 1
while i <= n:
    if n%i == 0:
        print(i)
        i += 1
    else:
        i += 1

سپس عدد 300000000 (300 میلیون) را در نظر گرفتم. و بعد در نرم‌افزار PyCharm (یکی از نرم‌افزارهای حرفه‌ای برای اجرای کدهای پایتون) کد بالا را اجرا کردم و بعد عدد 300000000 را وارد کردم و بلافاصله تایمر گوشی‌ام را روشن کردم.

تقریباً یک دقیقه و چهل ثانیه (01:40) طول کشید تا پایتون کل شمارنده‌های عدد 300000000 را محاسبه کند و نمایش دهد.

سپس به‌سراغ سی‌پلاس‌پلاس رفتم و کدی که به‌زبان سی‌پلاس‌پلاس نوشته‌بودم را در نرم‌افزار ++Dev-C (یکی از نرم‌افزارهای ساده و البته حرفه‌ای برای اجرا کردن کدهای سی‌پلاس‌پلاس) اجرا کردم و بعد عدد 300000000 را وارد کردم و بلافاصله تایمر گوشی‌ام را روشن کردم.

تنها دو ثانیه (00:02) طول کشید تا سی‌پلاس‌پلاس کل شمارنده‌های عدد 300000000 را محاسبه کند و نمایش دهد!

این یعنی این که مدت‌زمانی که سی‌پلاس‌پلاس صرف محاسبۀ تمام شمارنده‌های این عدد کرده‌بود، $ \frac{1}{50} $ مدت‌زمانی است که پایتون هم همین کار را انجام داده بود!


  • اما واقعاً علت این همه تفاوت بین سرعت پایتون و سی‌پلاس‌پلاس، چیست؟

پایتون یک زبان سطح بالا و مفسری است. سطح بالا بودن و مفسری بودن یک زبان برنامه‌نویسی باعث می‌شود که سرعت آن نسبت به‌زبان‌های برنامه‌نویسی دیگر، پائین‌تر باشد. اما سی‌پلاس‌پلاس یک زبان سطح پائین و کامپایلری است. همین موضوع باعث می‌شود تا سرعت آن نسبت به‌پایتون و حتی بعضی از زبان‌های برنامه‌نویسی دیگر، بالاتر باشد؛ در واقع، در زبان‌های کامپایلری ابتدا یکبار کد‌ها به صورت کامل ترجمه می‌گردند و سپس برنامه برای اجرا از روی فایل کامپایل شده اجرا می‌گردد. اما در زبان‌های مفسری کدها به صورت خط به خط تفسیر و اجرا می‌شوند و این روند در اجراهای بعدی برنامه نیز به همین صورت ادامه می‌یابد.

پس در نهایت می‌توان نتیجه گرفت که پایتون برای کار با اعداد بزرگ و محاسبات سنگین ریاضی، خیلی مناسب نیست؛ زیرا در انجام محاسبات سنگین ریاضی و کار با اعداد بزرگ، واقعاً آهسته است.

دارای دیدگاه آبان ۸, ۱۴۰۰ توسط AmirHosein (19,718 امتیاز)
درود، کار قشنگی کردید و البته نتیجه‌ای که گرفتید به دور از انتظار نبوده‌است. پایتون از میپل برای انجام محاسبه‌ای که به کلی تابع از پیش‌تعریف‌شده و فضای خاص نداشته‌باشد، سریع‌تر است و سی‌پلاس‌پلاس هم از پایتون سریع‌تر است و جولیا هم از سی‌پلاس‌پلاس سریع‌تر. البته می‌توانید از بستهٔ نومبا Numba در پایتون استفاده کنید که آنگاه سرعت‌تان به جولیا می‌رسد و در نتیجه پایتون را از سی‌پلاس‌پلاس سریع‌تر می‌کند. به صورت پیش‌فرض، پایتون در حال چک کردن کلی شرط اضافه است مانند اینکه حلقه‌هایتان به دورِ بی‌نهایت برنخورند یا محاسبات عددی‌تان یک سری مشکلات ایجاد نکنند یا چک کند که باید از چه نوع متغیری برای نگهداری داده استفاده کنید، که سی‌پلاس‌پلاس به صورت پیش‌فرض این شرط‌ها را چک نمی‌کند و این خود می‌تواند تفاوت زمانی زیادی را ایجاد کند.
برای اندازه‌گیری زمان می‌توانید به صورت خودکار این وظیفه را به رایانه یا همان زبان برنامه‌نویسی‌تان محول کنید. در سی‌پلاس‌پلاس از chrono و در پایتون از time استفاده کنید.
پاسخ داده شد آبان ۳۰, ۱۴۰۰ توسط UnknownUser (1,608 امتیاز)
@AmirHosein بادرود و ممنون از توجه‌تان.
بنده پس از دیدن این دیدگاه شما، در مورد زبان برنامه‌نویسی جولیا کنجکاو شدم که چطور زبانی است و آیا واقعاً از ++C سریع‌تر است؟
بنابراین پس از کمی جست‌وجو در اینترنت متوجه‌شدم که نحو این زبان به پایتون شباهت زیادی دارد و در مورد سرعت آن هم پس از جست‌وجو در اینترنت متوجه شدم که جولیا هنگام تجزیۀ "NIST Additive Manufacturing Test Artifact"، دوبرابر از ++C سریع‌تر است.
البته خودم کامپایلر اصلی زبان برنامه‌نویسی جولیا را دانلود و نصب کردم و دقیقاً همین آزمایش این مطلب را با همان الگوریتم و عدد 300 میلیون، روی جولیا تست کردم.
تقریباً یک ده ثانیه (01:10) طول کشید تا جولیا کل شمارنده‌های عدد 300000000 را محاسبه کند و نمایش دهد. یعنی سی ثانیه سریع‌تر از پایتون. بنابراین، در این محاسبه، جولیا از ++C سریع‌تر نیست. اما شاید در محاسبات دیگر، سریع‌تر باشد.
پاسخ داده شد آبان ۳۰, ۱۴۰۰ توسط AmirHosein (19,718 امتیاز)
@Math.Al توجه کنید که برنامه‌‌های جولیا را باید دوبار اجرا کنید. یک بار با یک ورودی کوچک اجرا کنید تا صرفا جولیا پشتِ زمینهٔ برنامه را بسازد و سپس دفعهٔ دوم به بعد با عددی که می‌خواهید اجرا کنید تا سرعت ادعاشدهٔ جولیا را ببینید. و البته به نوع محاسبه و طرز نوشتن برنامه هم بستگی دارد. برای یک مقایسه در یک موضوع خاص می‌توانید به یکی از کارهای قدیمم نگاه کنید. جدول شمارهٔ ۲ صفحهٔ ۱۵ پیش‌نسخهٔ مقالهٔ آمده در پیوند زیر.
https://arxiv.org/pdf/2010.00804.pdf
بزرگترین ریاضیدانان، همچون ارشمیدس، نیوتن و گاوس، همواره نظریه و کاربردها را در اندازه ی یکسان در هم می آمیزند.
...