C# تنفيذ طرق التمديد لنوع بيانات BigInteger. مثل استخراج الجذر التاسع ، وتوليد قيمة عشوائية وتخصيص الأسعار. بقلم نيكولاي thesquid.
سأكون سعيدًا بدمج طلبات السحب الخاصة بك لتحسين أداء الحساب. حتى لو كان التحسن يؤثر فقط على الحالات الفردية من نطاق القيم.
لاستخدام هذه الامتدادات ، ستحتاج إلى إضافتها إلى كودك مساحات الأسماء التالية: System.Numerics و TheSquid.Numerics.Extensions .
C# تنفيذ طريقة تمديد لحساب الجذر التاسع (بما في ذلك الجذر التربيعي) لقيمة BigInteger.
في الأساس ، يمكنك نسخ NTHROOTExtension من مستودع المصدر إلى مشروعك. خيار آخر هو إضافة حزمة thesquid.numerics.Extensions من مستودع Nuget إلى تبعيات مشروعك.
مثال الاستخدام:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var root = source . NthRoot ( exponent , out var isExactResult ) ;يمكنك بدء اختبارات nthroot عشوائية مباشرة بعد مستودع الاستنساخ وإنشاء حل. يجب تشغيل إنشاء اختبارات وإعادة بناء الحل قبل بدء اختبارات الجذر NTH.
تستخدم طريقة التمديد خوارزميات حساب الجذر: طريقة Newton المعروفة وطريقة رقمية من الرقم. مع زيادة درجة الجذر ، يتباطأ الحساب بواسطة طريقة Newton ، وتسارع طريقة الرقم الرقم. مع ترتيب قيمة الجذر Radicand البالغ 100000 رقم عشري ، يكون اعتماد سرعة الحساب على درجة الجذر كما يلي:

C# تنفيذ طريقة تمديد لإنشاء قيمة biginteger عشوائية ضمن النطاق المحدد.
في الأساس ، يمكنك نسخ Class NextBiginTegerextension من مستودع المصدر إلى مشروعك. خيار آخر هو إضافة حزمة thesquid.numerics.Extensions من مستودع Nuget إلى تبعيات مشروعك.
مثال الاستخدام:
var min = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var max = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var random = new Random ( DateTime . Now . Millisecond ) . NextBigInteger ( min , max ) ;يمكنك بدء اختبارات عشوائية لأسلوب تمديد NextBiginteger باستخدام فئة NextBiginTegerextensionts من Project thesquid.numerics.extensions.tests مباشرة بعد مستودع الاستنساخ ومحلول البناء.
طريقة التمديد لفئة النظام عشوائي. تستخدم الطريقة مثيل فئة عشوائية لإنشاء مجموعة من البايتات العشوائية.
C# تنفيذ طريقة تمديد للحساب الأسرع للقوى مع المعلمات المتكررة باستخدام ذاكرة التخزين المؤقت.
في الأساس ، يمكنك نسخ فئة POWCacheDextension من مستودع المصدر إلى مشروعك. خيار آخر هو إضافة حزمة thesquid.numerics.Extensions من مستودع Nuget إلى تبعيات مشروعك.
مثال الاستخدام:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var power = source . PowCached ( exponent ) ; يقوم POW Cache بمسح نفسه تلقائيًا. أولاً ، إذا حدث خطأ في الذاكرة عند حساب الطاقة. ثم سيتم مسح ذاكرة التخزين المؤقت بالكامل. ثانياً ، إذا وصل عدد العناصر في ذاكرة التخزين المؤقت إلى عدد int.MaxValue . ثم سيتم مسح ذاكرة التخزين المؤقت بمقدار النصف. بالإضافة إلى ذلك ، يمكنك التحقق من عدد العناصر الموجودة في ذاكرة التخزين المؤقت ومسحها يدويًا ، مما يترك عددًا محددًا من العناصر.
مثال الاستخدام:
var available = PowCachedExtension . ItemsInCache ;
var threshold = long . Parse ( Console . ReadLine ( ) ) ;
if ( threshold < available ) PowCachedExtension . ShrinkCacheData ( threshold ) ;يمكنك بدء اختبارات عشوائية لطريقة التمديد powcached باستخدام فئة PowCacheDextensionts من Project thesquid.numerics.extensions.tests مباشرة بعد مستودع الاستنساخ ومحلول البناء.
يتم تحقيق التسارع من خلال حفظ نتائج درجات الحوسبة ، وكذلك حفظ النتائج الوسيطة التي تم الحصول عليها في تقدم الحساب. مع قيم الطابق السفلي العشوائي في النطاق من 0 إلى 1000 ، فإن قيم الأسس العشوائية في النطاق من 0 إلى 1000 وتكرار عدد التكرار حتى 2000000 ، فإن اعتماد سرعة الحساب على ملء ذاكرة التخزين المؤقت هو كما يلي:
