Math.Sqrt Method
Updated: June 2011
Returns the square root of a specified number.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- d
- Type: System.Double
A number.
Return Value
Type: System.DoubleOne of the values in the following table.
d parameter | Return value |
|---|---|
Zero, or positive | The positive square root of d. |
Negative | |
Equals NaN | |
Equals PositiveInfinity |
The square root of the area of a square represents the length of any side of the square. The following example displays the area of some cities in the United States and gives an impression of each city's size if it were represented by a square.
using System; public class Example { public static void Main() { // Create an array containing the area of some squares. Tuple<string, double>[] areas = { Tuple.Create("Sitka, Alaska", 2870.3), Tuple.Create("New York City", 302.6), Tuple.Create("Los Angeles", 468.7), Tuple.Create("Detroit", 138.8), Tuple.Create("Chicago", 227.1), Tuple.Create("San Diego", 325.2) }; Console.WriteLine("{0,-18} {1,14:N1} {2,30}\n", "City", "Area (mi.)", "Equivalent to a square with:"); foreach (var area in areas) Console.WriteLine("{0,-18} {1,14:N1} {2,14:N2} miles per side", area.Item1, area.Item2, Math.Round(Math.Sqrt(area.Item2), 2)); } } // The example displays the following output: // City Area (mi.) Equivalent to a square with: // // Sitka, Alaska 2,870.3 53.58 miles per side // New York City 302.6 17.40 miles per side // Los Angeles 468.7 21.65 miles per side // Detroit 138.8 11.78 miles per side // Chicago 227.1 15.07 miles per side // San Diego 325.2 18.03 miles per side
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
I'm working with a program that will need lots lots distance(sqrt) calculations. I'm wondering how fast is this method implemented and whether it's worthwhile to build a look-up table before runtime and just do linear interpolation into that lookup table.
If the look-up table method is used, then every sqrt operation will be substituted with a look-up into a large 2D array (probably not small enough to fill into cpu cache), and a bi-linear interpolation in a grid cell. Would you think this will speed up the calculation or it doesn't help that much?
Thanks.
Adequate Performance?
If you're dissatisifed with the performance of Math.Sqrt, you may have to try your own benchmarks using your own data. But my sense is that this method offers adequate performance, and almost certainly offers performance that is superior to a lookup table, particularly if you have to create the look-up table dynamically. In addition, particularly if the numbers whose square roots you are looking up are computed vales, it's possible that a loss of precision could cause some values to not be matched in the table.
So for both reasons, Math.Sqrt seems like the best option.
--Ron Petrusha
Common Language Runtime User Education
Microsoft Corporation
- 12/9/2011
- Lycoress
- 12/12/2011
- R Petrusha - MSFT
Why Math.Sqrt doesn't throw error for negative numbers but NaN?
Why NaN Instead of an InvalidOperationException?
In numerous cases in which an operation with integer types throws an exception, the corresponding operation with floating point types returns NaN. For example, division by zero with integer types throws a DivideByZeroException, but division by zero with floating point types returns NaN. This behavior is defined in the Common Language Infrastucture (CLI) specification, Partition I, Section 12.1.3 (see http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf):
While the IEC 60559:1989 standard also allows for exceptions to be thrown under unusual conditions (such as overflow and invalid operand), the CLI does not generate these exceptions. Instead, the CLI uses the NaN, +infinity, and –infinity return values and provides the instruction ckfinite to allow users to generate an exception if a result is NaN, +infinity, or –infinity.
--Ron Petrusha
Common Language Runtime User Education
Microsoft Corporation
- 6/15/2011
- Niko Vrdoljak
- 7/11/2011
- R Petrusha - MSFT