**Example.** This program is 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.

**VB.NET program that calls Math.Sqrt**
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

**Internals.** In the .NET Framework, 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 Tutorial**Implementation of Sqrt: IL**
.method public hidebysig static float64 Sqrt(float64 d) cil managed internalcall
{
} // end of method Math::Sqrt

**Performance.** Let's look into the performance characteristics of Math.Sqrt. Some arguments to Math.Sqrt are much faster than others. For example, Math.Sqrt(4) only takes two nanoseconds, while Math.Sqrt(4.1) takes six nanoseconds.

**Tip:** The performance of Math.Sqrt largely depends on what arguments you pass to it.

Benchmarks**VB.NET program that times Math.Sqrt**
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
**Output**
2.61 ns
6.20 ns