5

我在反射器中寻找 Atan2 的 .NET 实现,发现以下行:

public static extern double Atan2(double y, double x);

这并不奇怪,因为大多数算术函数在本机代码中实现是有意义的。但是,在 System.Math 中没有与此函数或其他函数关联的 DllImport 调用。

核心问题是关于函数如何在本机代码中实现,但我也想知道它驻留在哪个本机 Dll 中。另外,为什么没有 DllImport?那是因为编译把它去掉了吗?

4

2 回答 2

1

查看 Math.cs,您会注意到 Atan2 直接作为内部调用实现。

[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern double Atan2(double y, double x);

这基本上告诉 .NET 调用底层 C++ 函数。

更多信息: 是否可以将标有 MethodImplOptions.InternalCall 的方法链接到其实现?

下载地址:http: //www.microsoft.com/en-us/download/details.aspx?id=4917

来自 comfloat.cpp:

/*=====================================Atan2=====================================
**
==============================================================================*/
FCIMPL2_VV(double, COMDouble::Atan2, double x, double y) 
    WRAPPER_CONTRACT;
    STATIC_CONTRACT_SO_TOLERANT;

        // the intrinsic for Atan2 does not produce Nan for Atan2(+-inf,+-inf)
    if (IS_DBL_INFINITY(x) && IS_DBL_INFINITY(y)) {
        return(x / y);      // create a NaN
    }
    return (double) atan2(x, y);
FCIMPLEND
于 2013-06-26T06:21:08.213 回答
0

Atan2 只是围绕实际数学函数 Atan 的一小段代码(对 gamedev 和其他一些随机编程情况很有用。)

它可能只是直接定义的,然后它使用的 Atan 代码是外部的。

于 2013-06-26T05:31:41.140 回答