سؤال

وفقا لمساعدة 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top