نوع داده double در آردوینو — آیا واقعاً دقت بیشتری دارد؟  
آردوینو ایران | آموزش تخصصی آردوینو به فارسی

آردوینو ایران | آموزش تخصصی آردوینو به فارسی

آردوینو ایران — مرجع تخصصی آموزش آردوینو به فارسی! دوره‌های کاربردی، پروژه‌محور و گام‌به‌گام برای مبتدی‌ها تا پیشرفته‌ها: از راه‌اندازی اولین LED تا ساخت ربات، IoT و سیستم‌های هوشمند خانه. یادگیری عملی، کدنویسی ساده، پشتیبانی فنی و دسترسی مادام‌العمر به محتوا — فقط برای عاشقان الکترونیک و برنامه‌نویسی سخت‌افزاری.

اشتراک در خبرنامه

جهت عضویت در خبرنامه لطفا ایمیل خود را ثبت نمائید

Captcha

آمار بازدید

  • بازدید امروز : 30
  • بازدید دیروز : 24
  • بازدید کل : 14848

نوع داده double در آردوینو — آیا واقعاً دقت بیشتری دارد؟


نوع داده double در آردوینو — آیا واقعاً دقت بیشتری دارد؟

نوع داده double در آردوینو — اعداد اعشاری با دقت بالا؟ نه همیشه!

double چیست؟

در بسیاری از زبان‌های برنامه‌نویسی (مثل C++ روی کامپیوتر)، نوع داده‌ی double برای ذخیره‌ی اعداد اعشاری با دقت بالا (معمولاً ۸ بایت) استفاده می‌شود.
اما در آردوینو (مخصوصاً روی تراشه‌های AVR مثل Uno، Nano و Mega)، double دقیقاً همان float است!

یعنی: — هر دو ۴ بایت حافظه مصرف می‌کنند.
— هر دو دقتی حدود ۶ تا ۷ رقم اعشاری دارند.
— هیچ تفاوتی در عملکرد یا دقت بین آن‌ها وجود ندارد.

این رفتار به دلیل محدودیت‌های سخت‌افزاری تراشه‌های AVR است — آن‌ها واحد پردازش اعشاری (FPU) ندارند، پس همه محاسبات اعشاری به‌صورت نرم‌افزاری و با دقت محدود انجام می‌شوند.

چرا double وجود دارد اگر مثل float است؟

دو دلیل اصلی وجود دارد:

  1. سازگاری با کد استاندارد C++: بسیاری از کتابخانه‌ها و مثال‌های جهانی از double استفاده می‌کنند. آردوینو این نام را پشتیبانی می‌کند تا کدها بدون خطا کامپایل شوند.
  2. آینده‌نگری: روی بردهای پیشرفته‌تر آردوینو (مثل Arduino Due یا Portenta که از تراشه‌های ARM استفاده می‌کنند)، double واقعاً ۸ بایت است و دقت بیشتری دارد. پس اگر کد شما قابل انتقال باشد، بهتر است از همان ابتدا درست بنویسید.

نحوه استفاده از double

استفاده از double دقیقاً مثل float است:

double temperature = 23.45;
double voltage = 3.3;
double pi = 3.14159265359;

اما به یاد داشته باشید: در آردوینو Uno، این متغیرها همان float هستند و دقت بیشتری ندارند!

مثال کاربردی: محاسبه ولتاژ واقعی از مقادیر آنالوگ

وقتی از analogRead() استفاده می‌کنید، یک عدد بین ۰ تا ۱۰۲۳ دریافت می‌کنید. برای تبدیل آن به ولتاژ واقعی، نیاز به عدد اعشاری دارید:

const double REF_VOLTAGE = 5.0;  // ولتاژ مرجع
int sensorValue = analogRead(A0);
double voltage = sensorValue * (REF_VOLTAGE / 1023.0);

Serial.print("ولتاژ: ");
Serial.print(voltage);
Serial.println(" ولت");

در اینجا استفاده از double کاملاً قابل قبول است — حتی اگر در پس‌زمینه float باشد، خوانایی کد را بالا می‌برد.

نکته طلایی ۱: در آردوینو Uno، double = float — پس RAM را هدر ندهید!

چون double در AVR هیچ مزیتی نسبت به float ندارد، استفاده از آن فقط باعث سردرگمی می‌شود.
اگر روی بردی مثل Uno یا Nano کار می‌کنید، بهتر است همیشه از float استفاده کنید.
اما اگر کد شما باید روی برد Due هم اجرا شود و به دقت بالا نیاز دارد، آنگاه double منطقی است.

نکته طلایی ۲: اعداد اعشاری در آردوینو کند هستند!

تراشه‌های AVR فاقد پردازنده‌ی اعشاری هستند، پس هر عملیات ریاضی با float یا double بسیار کندتر از اعداد صحیح است.
اگر سرعت مهم است (مثل کنترل موتور یا پردازش سنسور بلادرنگ)، سعی کنید از اعداد صحیح استفاده کنید — مثلاً به جای ۲۳.۴۵ ولت، از ۲۳۴۵ میلی‌ولت استفاده کنید!

منبع رسمی

این مطلب بر اساس مستندات رسمی Arduino از بخش double – Language Reference تهیه شده است، با توضیحات شفاف درباره تفاوت واقعی (یا عدم تفاوت) double و float در پلتفرم‌های مختلف آردوینو.

  انتشار : ۱۲ مهر ۱۴۰۴               تعداد بازدید : 300

برچسب های مهم

دیدگاه های کاربران (0)

http://kia-ir.ir

تمام حقوق مادی و معنوی این وب سایت متعلق به "آردوینو ایران | آموزش تخصصی آردوینو به فارسی" می باشد

فید خبر خوان    نقشه سایت    تماس با ما