تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 4 از 4

نام تاپيک: باگ در Visual Basic 6

  1. #1
    اگه نباشه جاش خالی می مونه Morteza561's Avatar
    تاريخ عضويت
    Jul 2008
    محل سكونت
    پایتخت خوشنویسی ایران = قزوین
    پست ها
    467

    پيش فرض باگ در Visual Basic 6

    من این سوال رو هر جا که تونستم مطرح کردم ولی هنوز جوابی نگرفتم:

    چرا حاصل یه تفریق مثل نمونه زیر ادر Visual Basicشتباه در میاد؟


    1.9 - 1.99 می شود 9.00000000000001E-02

    ممنون میشم زودتر جواب بدید.

  2. 2 کاربر از Morteza561 بخاطر این مطلب مفید تشکر کرده اند


  3. #2
    پروفشنال
    تاريخ عضويت
    May 2008
    محل سكونت
    Kurdistan
    پست ها
    855

    پيش فرض

    من این سوال رو هر جا که تونستم مطرح کردم ولی هنوز جوابی نگرفتم:

    چرا حاصل یه تفریق مثل نمونه زیر ادر Visual Basicشتباه در میاد؟


    1.9 - 1.99 می شود 9.00000000000001E-02

    ممنون میشم زودتر جواب بدید.
    وقتی متغیر از نوع Currency باشه ، جواب درست درمیاد !

    ولی نمیدونم چرا با Single و Double این جواب رو میده !

  4. این کاربر از M i L @ D بخاطر این مطلب مفید تشکر کرده است


  5. #3
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    من که از VB6 خوشم نمی آید ولی این مورد باگ نیست!
    در محیطهای دیگر هم وجود دارد.
    دلیلش هم فقط و فقط مربوط به تبدیلات مبنای دو (باینری) اعداد اعشاری میشود.
    اصولاً به همین دلیل است که برای موارد مالی در VB6 نوع Currency و در VB7,8,9,10 نوع Decimal را پیشنهاد میکنند.
    (
    البته برای ما ایرانی ها به دلیل نداشتن اعشار در واحد پولی نوع Integer و Long در VB7,8,9,10 کافی است.
    Integer در VB7,8,9,10 برابر Long در VB6 است!
    Long در VB7,8,9,10 هیچ معادلی در VB6 ندارد!!
    )

    =====

    همانطور که در مبنای 10 برای ارزش مکانی اعداد یکان و ده گان و صدگان و هزارگان و... داریم.
    در مبنای 2 هم برای ارزش مکانی اعداد یکان و دوگان و چهارگان و هشت گان و.... داریم.

    مثلاً عدد 0101در باینری میشود 5 چرا؟
    یک یک در محل یگان دارد و یک یک هم در محل چهارگان دارد که میشود 5 !

    =====

    در ارزش مکانی زیر اعشار هم همین وضعیت را داریم ...
    یعنی در مبنای 10 ارزش مکانی یکدهم گان(!) و یکصدم و یک هزارم و... را داریم.

    در مبنای 2 هم ارزش مکانی یک دوم گان(!) و یک چهارم و یک هشتم و... را داریم.

    یعنی اعداد اعشاری شما باید به نوعی به جمع این ارزش مکانی های مبنای 2 تبدیل شود که همیشه امکان دقیق این کار وجود ندارد!!!!

    مشابه مشکل 10 تقسیم بر 3 در مبنای ده خودمان! که حاصلش میشود 3.33333333333333 و تعداد 3 ها تمامی ندارد ولی متغیر حافظه محدود است و تا تعداد ارقام خاصی را میتواند جا دهد!
    به نوعی شبیه این مشکل در مبنای 2 هم با شرایط خودش رخ میدهد و اعداد ما در مبنای 10 امکان دارد کامل و دقیق به مبنای دو تبدیل نشوند و یا محاسبات کمی با چیزی که ما از مبنای ده انتظار داریم تفاوت داشته باشد.

    =====

    به همین دلایل هم است که مدام در منابع آنلاین/آفلاین مایکروسافت و کتوب معتبر تاکید میشود که متغییر های ممیز شناور را با هم مقایسه تساویر نکنید ...
    یعنی در کدتان جایی برای single و double ننویسید if x = y !!!
    چون به احتمال اینکه تساوی برقرار نشده و false باشد بسیار بیشتر خواهد بود.
    نوعهای اعشار را همواره باید با یک مقدار فاصله مطلوب از هم مقایسه کرد.
    if ABS(x-y)<0.001
    (یعنی x و y اختلافی کمتر از یکهزارم داشته باشند)

    و...

    =====

    ولی ساختار متغیر های Currency یا Decimal کاملاً Binary نیست.
    به این معنی که در این ساختارها عدد اصلی جداگانه Binary ذخیره میشود و توان علمی در مبنای 10 (نه 2!) هم جداگانه Binary میشود.

    موفق باشید.

  6. 4 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  7. #4
    اگه نباشه جاش خالی می مونه Morteza561's Avatar
    تاريخ عضويت
    Jul 2008
    محل سكونت
    پایتخت خوشنویسی ایران = قزوین
    پست ها
    467

    پيش فرض

    واقعا دست هر دو عزیز (Lee_Young_Ae2027 جان و _H2_ جان درد نکنه) وای که چقدر کشتم خودمو تا این جوابا رو بشنوم. باور کنید حداقل از بیست نفر این سوال رو پرسیده بودم ولی بی جواب مونده بود. واقعا از ته دل میگم:

    اجرکم عندالله...

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •