PDA

View Full Version : مشکل در کار با اعداد بزرگ



king ag
سه شنبه 24 آبان 1390, 19:54 عصر
سلام خدت شما دوستان عزیز
به یک مشکل عجیب برخوردم که برام نامفهوم بود
من وقتی دارم از عملگر mod استفاده میکنم، اگر عدد اول بزرگ بشه ارور over flew میده
برای مثال:
1000000000 Mod 3
مشکلی نداره
ولی:
10000000000 Mod 3
ارور میده

چیکار کنم که بتونم رو اعداد برگتر هم عملیات انجام بدم؟
باتشکر
موفق باشید

MohammadGh2011
سه شنبه 24 آبان 1390, 20:45 عصر
سلام عليکم
تو تعريف متغير از چه نوع ، متغير رو تعريف کرديد؟
از دستور Double مانند دستور زير استفاده کن براي اون متغيرت.
Dim x As Double

يا شايد هم به خاطر اينه که شما ميخواهيد باقي مانده(Mod) رو حساب کنيد و اعداد بزرگ رو قبول نميکنه.

موفق باشيد.

mr-adler
سه شنبه 24 آبان 1390, 23:50 عصر
سلام
البته اگه میخواهید مشکلتون مستقیما حل بشه روش اقای قائم پناه رو ادامه بدید اما اگه میخواهید در هر صورت حل بشه(روشش مهم نیست) شاید این کد به کارتون بیاد. در ضمن اگه عددتون به غیر از 3 چیز دیگری بود باز هم میشه با عوض کردن کد نتیجه گرفت:

Private Sub Command1_Click()
For i = 1 To Len(Text1.Text)
a = Mid(Text1.Text, i, 1)
b = b + Val(a)
Next i
If b Mod 3 = 0 Then
MsgBox Text1.Text & " " & "mod 3 = 0"
Else
MsgBox Text1.Text & " " & "mod 3 <> 0"
End If
End Sub
:بامزه:
:لبخند:

king ag
پنج شنبه 26 آبان 1390, 19:23 عصر
آخه مگه من اینجا متغیری استفاده کردم که شما گفتی از نوع دابل تعریف کن
همین طوری عدیدی بنویسی قبول نمیکنه!!!

ممنون از mr.adler
بی زحمت میتونی اینو برای 300 تغییر بدی که باقیماندرو دقیق حساب کنه؟؟؟!

اگر راه مستقیم هم برای اعداد بزرگ داره که بسم الله
ممنون از همگی

MohammadGh2011
پنج شنبه 26 آبان 1390, 19:53 عصر
آخه مگه من اینجا متغیری استفاده کردم که شما گفتی از نوع دابل تعریف کن
همین طوری عدیدی بنویسی قبول نمیکنه!!!
من که برنامه ي کاملتون رو نديدم،گفتم شايد متغيري در اول برنامت تعريف کردي که اعداد بزرگ رو قبول نميکنه.
روش جناب mr-adler خوبه،همون رو ادامه بديد.

mr-adler
پنج شنبه 26 آبان 1390, 22:56 عصر
سلام
به جای x و عدد 4 اعداد دلخواه خود را بذارید.البته به نظرم میشه خیلی بهتر از این هم نوشت....

Private Sub Command1_Click()
Dim a
x = 1E+15
a = x / 4
q = InStr(1, a, ".")
If q = Empty Then
MsgBox "baghimande mosavi sefr"
Else
w = Mid(a, 1, q)
MsgBox CStr(Val(x) - Val(CDbl((w)) * 4))
End If
End Subاین هم یه ایده دیگه . البته هنوز تکمیل نیست و نادرسته . میشه ادامه دادش اما روش اول جالب تر و بهتره...

x = 10000000000#
For i = 1 To 1000000
a = 300 * i
If Val(a) >= Val(x) Then
b = i - 1
MsgBox Val(x) - Val(CDbl((300 * b)))
Exit Sub
End If
Overflow Error

[HTML]You attempt to use a number in a calculation, and that number is coerced into an integer, but the result is larger than an integer. For example: Dim x As Long x = 2000 * 365 ' Error: Overflow To work around this situation, type the number, like this:
Dim x As Long x = CLng(2000) * 365



منبع:msdn
موفق باشید.

mr-adler
پنج شنبه 26 آبان 1390, 23:03 عصر
اگر راه مستقیم هم برای اعداد بزرگ داره که بسم الله
دوستان اگه کسی برای این طور محدودیت ها کد مستقیمی داره لطفا ارائه بده..
راستی ایا بقیه زبان های برنامه نویسی هم اینطور هستند که تایمر یه جور محدودیت داشته باشه , کد نویسی به این صورت محدودیت داشته باشه و .... ؟ !