كيف أعلن Max_Double في VB6؟
سؤال
وفقا لمساعدة MSDN ل VB6
يمكن التعبير عن قيم النقاط العائمة كما Mmmeeee أو mmmdeee، حيث ط ط ط ط ط طن آند إي هو الأساس (قوة 10). أعلى قيمة إيجابية لنوع البيانات الفردي هي 3.402823E + 38، أو 3.4 مرات 10 إلى القوة الثامنة والثلاثين؛ أعلى قيمة إيجابية لنوع البيانات المزدوج هي 1.79769313486232D + 308، أو حوالي 1.8 مرة 10 إلى القوة الثلاثينيات. يؤدي استخدام D لفصل Mantissa و Opponent في حرفي رقمي، مما يؤدي إلى التعامل مع القيمة كوعي مزدوج البيانات. وبالمثل، فإن استخدام E في نفس الموضة يعامل القيمة كنوع بيانات مفرد.
الآن في VB6 IDE حاولت إدخال هذا
const MAX_DOUBLE as Double = 1.79769313486232D+308
ومع ذلك، بمجرد الابتعاد عن هذا الخط يلقي IDE خطأ 6 (تجاوز فرط)
نتائج تجاوز الفائض عند محاولة إجراء مهمة تتجاوز حدود الهدف من المهمة. ...
فكيف يمكنني الحصول على max_duble (و min_double لهذه المسألة) المعرفة؟
المحلول
هل يجب أن يكون const؟ يمكنك الحصول على القيمة الدقيقة ل Max_Double في متغير عن طريق تعيين نمط البت الصحيح باستخدام CopyMemory من صفيف بايت.
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Dim Max As Double
Dim Idx As Long
Dim Bits(0 To 7) As Byte
For Idx = 0 To 5
Bits(Idx) = 255
Next
Bits(6) = 239 ' = 11101111
Bits(7) = 127
For Idx = 0 To 7
CopyMemory ByVal VarPtr(Max) + Idx, Bits(Idx), 1
Next
Debug.Print Max
تحرير: نسيت أنك سئلت أيضا عن min_double، وهو أمر أسهل.
Dim Min As Double
Dim Bits As Byte
Bits = 1
CopyMemory ByVal VarPtr(Min), Bits, 1
Debug.Print Min
نصائح أخرى
تحرير: حلها!
Const test As Double = 1.79769313486231E+308 + 5.88768018655736E+293
فحصها مزدوجة إلى المستوى الثنائي، يجب أن تكون عالية كما يمكنك الذهاب. يمكنك الاستمرار في إضافة قيم مثل 1 وما إلى ذلك، لكنها تسفر عن رقم يساوي، وليس أكبر من. الإخراج هذا: 0111111 | 11101111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 | 11111111 وهذا هو في الواقع Doublemax
قديم: يمكنك فقط استخدام اللانهاية الإيجابية.
الحل براغماتي واضح: تقليل الرقم قليلا.
Const MAX_DOUBLE As Double = 1.79769313486231E+308
أتصور أنه سيكون كافيا في معظم الحالات.
استخدم "E" للأستر في الرقم بدلا من "D" مثل هذا أدناه.
Public Const MAX_DOUBLE = 1.79769313486232E+308
تعديل
إلقاء نظرة على هذا الرابط أدناه، انتقل إلى الأسفل. يوضح مثال رمز الخرساني هذا كيف يتم استخدام هذا البناء. نأمل أن يساعد هذا.
http://www.experts-exchange.com/programming/languages/.net/visual_basic.net/q_22555684.html