Atan2是如何在.NET中实现的
本文关键字:实现 NET Atan2 | 更新日期: 2023-09-27 18:19:59
我在反射器中寻找Atn2的.NET实现,发现了以下行:
public static extern double Atan2(double y, double x);
这并不奇怪,因为大多数算术函数都可以用本机代码实现。但是,在System.Math.中没有与此函数或其他函数关联的DllImport调用
核心问题是函数是如何在本机代码中实现的,但我也想知道它位于哪个本机Dll中。此外,为什么没有DllImport?这是因为汇编把它去掉了吗?
查看Math.cs,您会注意到Atn2是直接作为内部调用实现的。
[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
Atan2只是一个围绕实际数学函数Atan的快速代码包(对于gamedev和其他一些随机编程情况很有用。)
它可能只是直接定义的,然后它使用的Atan代码是外部的。