2017-05-05 3 views
3

Ayant lu la documentation MSDN à la fois pour la fonction ^ (hat) operator et la fonction Math.Pow(), je ne vois aucune différence explicite. Est-ce qu'il y a un?Hat^opérateur vs Math.Pow()

Il y a évidemment la différence que l'un est une fonction alors que l'autre est considéré comme un opérateur, par ex. cela ne fonctionnera pas:

Public Const x As Double = 3 
Public Const y As Double = Math.Pow(2, x) ' Fails because of const-ness 

mais cela:

Public Const x As Double = 3 
Public Const y As Double = 2^x 

Mais est-il une différence dans la façon dont ils produisent le résultat final? Est-ce que Math.Pow() fait plus de contrôle de sécurité par exemple? Ou est-ce juste une sorte d'alias pour l'autre?

Répondre

5

Une façon de savoir est d'inspecter l'IL. Pour:

Dim x As Double = 3 
Dim y As Double = Math.Pow(2, x) 

L'IL est:

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 

Et pour:

Dim x As Double = 3 
Dim y As Double = 2^x 

L'IL aussi est:

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 le compilateur a tourné la ^ dans un appel à Math.Pow - ils sont identiques à l'exécution.

+0

Super, merci. Comment inspecte-t-on IL (dans VS2017)? – Toby

+2

Je ne sais pas dans VS - personnellement, je viens de jeter des extraits comme celui-ci dans [LINQPad] (https://www.linqpad.net/), comme [this] (https://i.stack.imgur.com/ZRO4F.png). –

+0

Cool, FYI je viens de trouver https://dotnetfiddle.net/ qui fait semblable mais en ligne, montre également IL :-) – Toby