数学库与 C# 中自己的库

Eve*_*rts 2 .net c# math performance lib

所以我们尝试用 C# 开发一个数学类,我们做到了。将结果与 System.Math 的原始数学类进行比较表明我们总是迟到一点或很多(特别是触发方法)。

但是当我们使用像 Absolut value 这样不包含大量代码的基本方法时,奇迹就出现了

if(value < 0) return -value;
else return value;
Run Code Online (Sandbox Code Playgroud)

我们仍然远远落后。

我不能让这个 abs 方法更小,我猜使用三元运算符也无济于事。

是因为 System.Math 是用 C 编写的吗?如果我们用母语写它会不会更快,尽管我读过它似乎不会改变太多。最后,一个 dll 能不能比一个类工作得更快,如果是,为什么,如果不是......为什么呢?

已经谢谢了。

use*_*702 5

继续Servé 的评论,该评论显示 CLR 是用 C++ 编写的,您会发现Math.Abs调用fabs 或 fabsf

FCIntrinsicSig("Abs", &gsig_SM_Flt_RetFlt, COMDouble::AbsFlt, CORINFO_INTRINSIC_Abs)
FCIntrinsicSig("Abs", &gsig_SM_Dbl_RetDbl, COMDouble::AbsDbl, CORINFO_INTRINSIC_Abs)
Run Code Online (Sandbox Code Playgroud)
/*=====================================AbsFlt=====================================
**
==============================================================================*/
FCIMPL1_V(float, COMDouble::AbsFlt, float f) 
    WRAPPER_CONTRACT;
    STATIC_CONTRACT_SO_TOLERANT;

    FCUnique(0x14);
    return fabsf(f);
FCIMPLEND

/*=====================================AbsDbl=====================================
**
==============================================================================*/
FCIMPL1_V(double, COMDouble::AbsDbl, double d) 
    WRAPPER_CONTRACT;
    STATIC_CONTRACT_SO_TOLERANT;

    return fabs(d);
FCIMPLEND
Run Code Online (Sandbox Code Playgroud)