أين يمكنني العثور على بايت لتطفو طاولة البحث؟

StackOverflow https://stackoverflow.com/questions/1089235

  •  23-08-2019
  •  | 
  •  

سؤال

كنت أبحث في البداية عن طريق تحويل البايت إلى تعويم، ووجدت إجابات تشير إلى الأسرع هو إنشاء جدول بحث.

لذلك كنت أتساءل عما إذا كان أي شخص يعرف طاولة بحث موجودة مسبقا يمكنني استخدامها.

هل كانت مفيدة؟

المحلول

عادة ما تقوم بتهيئة جدول البحث باستخدام خطوط بضعة أسطر من التعليمات البرمجية و LOOP أو أي ما يناسب هدفك. إنه مفيد فقط إذا كنت تقوم بعمل كبير من التحويلات على عدد محدود من المدخلات المحتملة.

المثال أدناه هو فقط لإظهار التقنية الأساسية للبناء واستخدام جدول البحث. ما لم يكن هناك المزيد من الرياضيات المعنية، سيكون هناك بالفعل أداء ضرب إذا قمت بتنفيذ هذا (انظر أدناه).

float[] lookupTable = new float[256];
for (int i = 0; i < 256; i++)
{
    lookupTable[i] = (float)i;
}

float convertedValue = lookupTable[byteValue];

الرمز هو C #، ليس لدي أي خبرة مع الهدف C. في C ++ سيكون إعلان الصفيف مختلفا بعض الشيء، لكنك تحصل على الفكرة.

متى تستخدم طاولة بحث؟

في المثال أعلاه، لا يوجد مكسب للأداء، لأنه لا يوجد حساب متورط، مجرد تحويل من البايت إلى تعويم. النظر في القضية التي تشارك فيها شعبة النقطة العائمة (مثل قضيتك):

    lookupTable[i] = i / 255f;

في هذه الحالة، يجب أن يكون جدول البحث أسرع من استخدام الحساب المباشر. كلما زاد تعقيد الرياضيات (علم المثلثات، وما إلى ذلك)، أكبر مكسب الأداء. استخدام آخر مشترك هو GAMM تصحح صورة (وظيفة أسية).

نصائح أخرى

جدول البحث؟ لا نحتاج إلى طاولات بحث نتن!

float floatVal = (float)byteVal;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top