While using exponential operator in C#, the compiler was reporting “Operator ^ cannot be applied to operands of type int and double.” While the same was compiling without any errors in VB.NET.
//C# Code, error while compiling
decimal i = 1 * (1 + 1) + 75 * 1 * (1 + 1) ^ 0.5;
'VB.NET Code. Compiled without errors
Dim i as decimal = 1 * (1 + 1) + 75 * 1 * (1 + 1) ^ 0.5 'outputs 108.066017177982 as expected
To circumvent the C# error, I updated the code to use Math.Pow() which was giving wrong output
decimal i = 1 * (1 + 1) + 75 * 1 * (1 + 1);
i = (decimal)Math.Pow((double)i, 0.5);
Console.WriteLine(i); //Outputs 12.328828005938 instead of 108.0660172
//Next i changed the datatype to double, still same results
double i = 1 * (1 + 1) + 75 * 1 * (1 + 1);
i = Math.Pow(i, 0.5);
Console.WriteLine(i); //Outputs 12.328828005938 instead of 108.0660172
While executing the same formula in Excel, gives 108.0660172 as expected.
=1 * (1 +1) + 75 * 1 * (1 + 1) ^ 0.5
Please help me resolve this.
In C# ^ is not a power operator. It’s a Xor operator. Here is the documentation about it: ^ Operator (C# Reference)
As for the reason why it evaluates to 12.32 is that 1 * (1 + 1) + 75 * 1 * (1 + 1) equals to 152 and sqrt(152) is about 12.32.
On the other hand in VB and Excel it is evaluated as 1 * (1 + 1) + 75 * 1 * sqrt(2) which is 108.06.
In c# you can express it as
double i = 1 * (1 + 1) + 75 * 1 * Math.Pow((1 + 1),0.5);