Оператор 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 - они идентичны во время выполнения.

Другие вопросы по тегам