المتابعون للمدونة

الأحد، 11 فبراير 2018

MathF Class


الفئة MathF

من الطبعة القادمة من كتاب: من الصفر إلى الاحتراف: برمجة إطار العمل.. تصدر قريبا بإذن الله:

تعرفون طبعا الفئة  Math التي تحتوي على الدوال الرياضية.. هذه الفئة تتعامل مع أعداد مزدوجة الدقة العشرية Double، وهذا مناسب للحسابات العلمية الدقيقة، لكن ثمنه هو بطء التنفيذ.. لهذا أضيف إلى دوت نت مؤخرا فئة جديدة اسمها MathF.. الحرف F هو اختصار Float وهو الاسم الآخر للأعداد مفردة الدقة العشرية Single في عائلة لغات C.. الفئة MathF نسخة طبق الأصل من الفئة Math لكنها تتعامل مع أعداد مفردة، وهذا يجعلها أسرع في التنفيذ، مع خسارة بعض الدقة العشرية، التي لا تهم كثيرا في التطبيقات التجارية وتطبيقات الألعاب والرسوم وغيرها.

المشكلة حاليا أن هذه الفئة لا تظهر في مشاريع إطار العمل، وإنما تظهر في مشاريع .Net core 2 فقط.. لو شئت تجربتها، افتح أي مشروع دوت نت كور مثل مشروع Console Application وجرب الكود.. ستجد أن استخدام MathF يوفر تقريبا نصف الوقت! 

C#:

var sp = new System.Diagnostics.Stopwatch();
const int Count = 100000;
sp.Restart();
float f = 0F;
for (var i = 0; i <= Count; i++)
    f = MathF.Cos(0.13334F); 

sp.Stop();
var t = sp.Elapsed.TotalMilliseconds;
Console.WriteLine($"Mathf time = {t}"); 

sp.Restart();
double d = 0;
for (var i = 0; i <= Count; i++)
     d = Math.Cos(0.13334); 

sp.Stop();
t = sp.Elapsed.TotalMilliseconds;
Console.WriteLine($"Math time = {t}");

Console.ReadLine(); 

VB.NET:
        Dim sp As New Stopwatch
        Const Count = 100000
        sp.Restart()
        Dim f As Single
        For i = 0 To Count
            f = MathF.Cos(0.13334F)
        Next
        sp.Stop()
        Dim t = sp.Elapsed.TotalMilliseconds
        Console.WriteLine($"Mathf time = {t}") 

        sp.Restart()
        Dim d As Double
        For i = 0 To Count
            d = Math.Cos(0.13334)
        Next
        sp.Stop()
        t = sp.Elapsed.TotalMilliseconds
        Console.WriteLine($"Math time = {t}")

        Console.ReadLine()

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر