
You want to take the square root of a number in your VB.NET program. With the Math.Sqrt function, you pass one Double value as an argument, and receive the square root of that as another Double.
This VB article shows how to get square roots. It uses the Math.Sqrt Function.
This program is very self-explanatory: it takes the square roots of four Doubles and prints them with Console.WriteLine. Notably, we can see that the square root of 1 is 1, and the square root of four is two.
Console.WriteLineProgram that calls Math.Sqrt [VB.NET]
Module Module1
Sub Main()
Dim result1 As Double = Math.Sqrt(1)
Dim result2 As Double = Math.Sqrt(2)
Dim result3 As Double = Math.Sqrt(3)
Dim result4 As Double = Math.Sqrt(4)
Console.WriteLine(result1)
Console.WriteLine(result2)
Console.WriteLine(result3)
Console.WriteLine(result4)
End Sub
End Module
Output
1
1.4142135623731
1.73205080756888
2
The Math.Sqrt function is not implemented in managed code. Rather, it calls into an unmanaged DLL. This means we cannot see its implementation in IL Disassembler.
IL Disassembler TutorialImplementation of Sqrt [IL]
.method public hidebysig static float64 Sqrt(float64 d) cil managed internalcall
{
} // end of method Math::Sqrt
Let's look into the performance characteristics of Math.Sqrt. I was interested to see that some arguments to Math.Sqrt are much faster to pass than others. For example, Math.Sqrt(4) only takes two nanoseconds, while Math.Sqrt(4.1) takes six nanoseconds. The performance of Math.Sqrt largely depends on what arguments you pass to it.
Program that times Math.Sqrt [VB.NET]
Module Module1
Sub Main()
Dim m As Integer = 10000000
Dim s1 As Stopwatch = Stopwatch.StartNew
For i As Integer = 0 To m - 1
If Math.Sqrt(4) = 1 Then
Throw New Exception
End If
Next
s1.Stop()
Dim s2 As Stopwatch = Stopwatch.StartNew
For i As Integer = 0 To m - 1
If Math.Sqrt(4.1) = 1 Then
Throw New Exception
End If
Next
s2.Stop()
Dim u As Integer = 1000000
Console.WriteLine(((s1.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns"))
Console.WriteLine(((s2.Elapsed.TotalMilliseconds * u) / m).ToString("0.00 ns"))
End Sub
End Module
Result
2.61 ns
6.20 ns
We examined several aspects of Math.Sqrt in the VB.NET programming language: how you can call it in a program; where it is implemented in the .NET Framework; and how fast it is. We were intrigued by how much the argument to the method affects the time it requires to compute its result.
VB.NET Tutorials