2 out of 2 rated this helpful - Rate this topic

Math.Sqrt Method

Updated: June 2011

Returns the square root of a specified number.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)
public static double Sqrt(
	double d
)

Parameters

d
Type: System.Double
A number.

Return Value

Type: System.Double
One of the values in the following table.

d parameter

Return value

Zero, or positive

The positive square root of d.

Negative

NaN

Equals NaN

NaN

Equals PositiveInfinity

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


.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library

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.

Date

History

Reason

June 2011

Replaced the example.

Customer feedback.

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
How fast is this method?

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

 

No error for negative numbers?

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