.net Hat^operator vs Math.Pow()
仔细阅读了和函数的MSDN文档后,我看不出有什么明显的区别。有吗 一个是函数,而另一个被视为运算符,这显然是不同的,例如,这将不起作用:.net Hat^operator vs Math.Pow(),.net,vb.net,pow,exponentiation,.net,Vb.net,Pow,Exponentiation,仔细阅读了和函数的MSDN文档后,我看不出有什么明显的区别。有吗 一个是函数,而另一个被视为运算符,这显然是不同的,例如,这将不起作用: Public Const x As Double = 3 Public Const y As Double = Math.Pow(2, x) ' Fails because of const-ness 但这将: Public Const x As Double = 3 Public Const y As Double = 2^x 但它们如何产生最终结果有区
Public Const x As Double = 3
Public Const y As Double = Math.Pow(2, x) ' Fails because of const-ness
但这将:
Public Const x As Double = 3
Public Const y As Double = 2^x
但它们如何产生最终结果有区别吗?例如,
Math.Pow()
是否进行更多的安全检查?或者一个只是另一个的别名?一种方法是检查IL。用于:
Dim x As Double = 3
Dim y As Double = Math.Pow(2, x)
IL是:
IL_0000: nop
IL_0001: ldc.r8 00 00 00 00 00 00 08 40
IL_000A: stloc.0 // x
IL_000B: ldc.r8 00 00 00 00 00 00 00 40
IL_0014: ldloc.0 // x
IL_0015: call System.Math.Pow
IL_001A: stloc.1 // y
以及:
Dim x As Double = 3
Dim y As Double = 2 ^ x
IL还包括:
IE编译器已将
^
转换为调用Math.Pow
-它们在运行时是相同的。在VS中不确定-我个人只是将类似的代码片段插入,如.Cool,仅供参考,我刚刚发现它做得类似,但在线,也显示IL:-)
IL_0000: nop
IL_0001: ldc.r8 00 00 00 00 00 00 08 40
IL_000A: stloc.0 // x
IL_000B: ldc.r8 00 00 00 00 00 00 00 40
IL_0014: ldloc.0 // x
IL_0015: call System.Math.Pow
IL_001A: stloc.1 // y