我在反射器中寻找Atan2的.NET实现,并找到以下行:
public static extern double Atan2(double y, double x);
Run Code Online (Sandbox Code Playgroud)
这并不奇怪,因为大多数算术函数都是用本机代码实现的.但是,没有与System.Math中的此函数或其他函数关联的DllImport调用.
核心问题是如何在本机代码中实现该功能,但我也想知道它所在的原生Dll.另外,为什么没有DllImport?那是因为编辑将它剥离了吗?
查看 Math.cs,您会注意到 Atan2 是直接作为内部调用实现的。
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public static extern double Atan2(double y, double x);
Run Code Online (Sandbox Code Playgroud)
这基本上告诉 .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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
775 次 |
| 最近记录: |