نمایش نتایج 1 تا 6 از 6

نام تاپیک: ضرب دو عدد مثبت و نتیجه منفی

  1. #1
    کاربر دائمی آواتار MNosouhi
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان
    پست
    883

    ضرب دو عدد مثبت و نتیجه منفی

    با سلام
    یلداتون مبارک
    دوستان در کد زیر ، چرا حاصل ضرب دو عدد مثبت ، مقدار منفی می شه ؟
    var Temp:Real;
    Num1,Num2:integer;
    begin
    Num1:=1000;
    Num2:=2795204;
    Temp:=Num1*Num2;
    ShowMessage('Temp:'+FloatToStr(Temp));
    end;


    Untitled.png

    همانطور که در تصویر می بینید نتیجه را عدد منفی بر می گرداند در صورتی که باید مقدار ۲۷۹۵۲۰۴۰۰۰ برگرداند .

  2. #2

    نقل قول: ضرب دو عدد مثبت و نتیجه منفی

    وقتی دارید دو عدد اینت رو در هم ضرب می کنید، جواب شما نباید بالاتر از رنج بزرگترین تایپ محاسبات جاری باشه، دلفی فرض می گیره جوابتون هم اینته و اینی می شه که دیدید.
    این رو امتحان کنید:

    Temp := 1.0 * Num1 * Num2;
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  3. #3
    کاربر دائمی آواتار MNosouhi
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان
    پست
    883

    نقل قول: ضرب دو عدد مثبت و نتیجه منفی

    متشکر از پاسختون

    وقتی دارید دو عدد اینت رو در هم ضرب می کنید، جواب شما نباید بالاتر از رنج بزرگترین تایپ محاسبات جاری باشه، دلفی فرض می گیره جوابتون هم اینته و اینی می شه که دیدید.
    این جواب منطقی نیست. اگر جواب واقعا همینی باشه که شما فرمودید ، همیشه (جهت احتیاط) در عملیات های شامل ضرب ، باید عبارت را در 1.0 ضرب کنیم ، چون ممکنه که عدد از رنج integer خارج بشه. یعنی دلفی اینقدر هوشمند نیست که مسئله به این سادگی را تشخیص بده. به نظرم مهم اینه که حاصلضرب از رنج معتبر مقصد (real) خارج نشه .
    سوال دیگه اینکه اگر Temp به جای real از نوع int64 باشه باید چگونه عمل کرد ؟

    var Temp:Int64;
    Num1,Num2:integer;
    begin
    Num1:=1000;
    Num2:=2795204;
    Temp:=Num1*Num2;
    ShowMessage('Temp:'+FloatToStr(Temp));
    آخرین ویرایش به وسیله MNosouhi : شنبه 29 آذر 1399 در 07:17 صبح

  4. #4

    نقل قول: ضرب دو عدد مثبت و نتیجه منفی

    دلفی و زبان های دیگه ای که باهاش برخورد داشتم معمولا همین طورند، اول محاسبات رو انجام می دن بعد می ریزن تو مقصد، همونطور که در نمونه اولیه هم دیدید محاسبات از اینت زده بود بالاتر ولی از ریل بالاتر نبود.
    در محاسباتی که خروجی بزرگتر از ورودی می خواهید، حتما یکی از ورودی هاتون رو باید بزرگ بگیرید، این مورد مشخصا روی نوع بایت هم وجود داره، مخصوصا برای تبدیلات بایتی و کدگذاری کردن یک متن.
    برای نمونه من روی اس کیو ال هم تست گرفتم و نتیجه مورد دار بود.

    در نمونه شما:


    var Temp:Int64;
    Num1,Num2:integer;
    begin
    Num1:=1000;
    Num2:=2795204;
    Temp:=Int64(1) * Num1*Num2;
    ShowMessage('Temp:'+FloatToStr(Temp));
    end;


    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  5. #5
    کاربر دائمی آواتار MNosouhi
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان
    پست
    883

    نقل قول: ضرب دو عدد مثبت و نتیجه منفی

    بسیار ممنون و مشکر

  6. #6

    نقل قول: ضرب دو عدد مثبت و نتیجه منفی

    نقل قول نوشته شده توسط MNosouhi مشاهده تاپیک
    بسیار ممنون و مشکر
    سلام
    اعداد علامت دار و بدون علامت ، هم چنین مبحث سرریز رو مطاله بفرمایید.

تاپیک های مشابه

  1. پاسخ: 2
    آخرین پست: یک شنبه 15 شهریور 1394, 16:54 عصر
  2. حرفه ای: change table در زمان اجرا | استفاده جداگانه از مدل یک تیبل برای تیبل مشابه (Entity Framework)
    نوشته شده توسط youngold در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 1
    آخرین پست: شنبه 18 خرداد 1392, 12:52 عصر
  3. پاسخ: 16
    آخرین پست: شنبه 18 خرداد 1392, 12:50 عصر
  4. ایجاد تیبلی شبیه تیبل اس کیو ال با دیتا گرید ویو
    نوشته شده توسط hojjat_gh در بخش C#‎‎
    پاسخ: 7
    آخرین پست: چهارشنبه 15 آبان 1387, 22:53 عصر
  5. پاسخ: 1
    آخرین پست: جمعه 24 خرداد 1387, 01:13 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •