سلام،
اگر مشکلی وجود داشته باشه معمولاً فقط روی نسبت هایی که نتیجه صفر باید داشته باشند وجود داره.
مثل همین کسینوس 90 درجه.
روی همین 90 درجه چند مثال میزنیم.
ابتدا سعی کنید تا جای ممکن عدد پی رو دقیق محاسبه کنید(هرچند که غیرممکن هست):
Dim pi As Double
pi = 3.14159265358979
خب، سینوس 90 درجه میشه 1 که دستور زیر هم همینو میگه:
MsgBox Sin(pi / 2) 'Sin(90) Result= 1
حالا کسینوس 90 درجه میشه 0 ، اما دستور زیر یه خروجی دیگه میده!:
MsgBox Cos(pi / 2) 'Cos(90) Result= 1.61554255216634E-15
این عدد، یک عدد بسیار بسیار نزدیک به صفر است. آن را اینگونه بخوانید: یک ممیز خورده ای ضربدر 10 به توان منفی پانزده. یعنی صفر ممیز، بعد از نقطه اعشار 14 تا صفر وجود داره و بعد مابقی اعشار. پس عدد خیلی خیلی نزدیک به صفر است:
0.00000000000000161554255216634
این مشکل برمیگرده به میزان دقت عدد pi. درواقع محاسبه درست انجام شده و اون عددی که شما می بینید همون کسینوس پی دوم هست. اما ما پی رو فقط تا 14 رقم اعشار درنظر گرفتیم. در صورتی که عدد پی یک عدد اصم هست. یعنی تعداد اعشار آن بینهایت هست.(لااقل تاکنون که اصم نبودن آن ثابت نشده).تصویری که در ضمیمه قرار داره عدد پی رو تا بیش از 4700 رقم اعشار نشون میده! شما میتوانید تا چند میلیون رقم اعشار هم آن را محسابه کنید اما این مقدار در متغیرها نمی گنجد.
برای رفع این مشکل شما می توانید یک شرط بزارید، که اگر عدد حاصل بسیار کوچک بود آن را 0 درنظر بگیر. پس دستور فوق رو به اینصورت می نویسیم:
Dim C90 As Double
C90 = Cos(pi / 2)
If C90 < 0.000000000000005 Then C90 = 0
MsgBox C90 'Result= 0
موفق باشید/