
در بسیاری از زبانهای برنامهنویسی (مثل C++ روی کامپیوتر)، نوع دادهی double برای ذخیرهی اعداد اعشاری با دقت بالا (معمولاً ۸ بایت) استفاده میشود.
اما در آردوینو (مخصوصاً روی تراشههای AVR مثل Uno، Nano و Mega)، double دقیقاً همان float است!
یعنی: — هر دو ۴ بایت حافظه مصرف میکنند.
— هر دو دقتی حدود ۶ تا ۷ رقم اعشاری دارند.
— هیچ تفاوتی در عملکرد یا دقت بین آنها وجود ندارد.
این رفتار به دلیل محدودیتهای سختافزاری تراشههای AVR است — آنها واحد پردازش اعشاری (FPU) ندارند، پس همه محاسبات اعشاری بهصورت نرمافزاری و با دقت محدود انجام میشوند.
دو دلیل اصلی وجود دارد:
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 باشد، خوانایی کد را بالا میبرد.
چون double در AVR هیچ مزیتی نسبت به float ندارد، استفاده از آن فقط باعث سردرگمی میشود.
اگر روی بردی مثل Uno یا Nano کار میکنید، بهتر است همیشه از float استفاده کنید.
اما اگر کد شما باید روی برد Due هم اجرا شود و به دقت بالا نیاز دارد، آنگاه double منطقی است.
تراشههای AVR فاقد پردازندهی اعشاری هستند، پس هر عملیات ریاضی با float یا double بسیار کندتر از اعداد صحیح است.
اگر سرعت مهم است (مثل کنترل موتور یا پردازش سنسور بلادرنگ)، سعی کنید از اعداد صحیح استفاده کنید — مثلاً به جای ۲۳.۴۵ ولت، از ۲۳۴۵ میلیولت استفاده کنید!
این مطلب بر اساس مستندات رسمی Arduino از بخش double – Language Reference تهیه شده است، با توضیحات شفاف درباره تفاوت واقعی (یا عدم تفاوت) double و float در پلتفرمهای مختلف آردوینو.
برچسب های مهم