Оператор Hat ^ против Math.Pow()
Изучив документацию MSDN для оператора ^ (hat) и функции Math.Pow(), я не вижу явной разницы. Есть один?
Очевидно, есть разница, что один является функцией, а другой считается оператором, например, это не будет работать:
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()
сделать больше проверки безопасности, например? Или один просто псевдоним другого?
1 ответ
Решение
Один из способов выяснить это - проверить ИЛ. За:
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 также является:
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
IE компилятор превратил ^
в вызов Math.Pow
- они идентичны во время выполнения.