我正在做一个需要这个的家庭作业项目:
下面你会找到我用来计算使用Newton-Raphson方法计算数字平方根的代码。将其包含在您的项目中。对于这个项目,你的工作是编写一个测试工具来测试我编写的代码。仔细阅读方法序言,了解该功能应如何工作。您的测试工具将提供以下循环:
所以我在大约15分钟内完成了所有这些,但是为了额外的功劳,他要求我们找到他的Sqrt方法有什么问题并修复它,使其返回值等于Math.Sqrt的返回值。 .net框架。我似乎无法在他的方法中找到问题,我想找到它,所以我想知道是否有人可以指出我正确的方向,他的Sqrt方法的问题是什么?感谢。
这是我的完整代码:
// declare variables
double userInput = 0.0;
double debrySqrtReturnValue = 0.0;
double dotNetSqrtReturnValue = 0.0;
int testCasesExecuted = 0;
int testsPassed = 0;
int testsFailed = 0;
bool isEqual = false;
do
{
// Prompt the user to enter in a test value
Console.Write("Please enter a positive integer value: ");
userInput = double.Parse(Console.ReadLine());
if (userInput != 0)
{
debrySqrtReturnValue = Sqrt(userInput);
dotNetSqrtReturnValue = Math.Sqrt(userInput);
Console.WriteLine("The square root of {0} is: {1}", userInput, debrySqrtReturnValue);
Console.WriteLine("The real square root of {0} is: {1}\n", userInput, dotNetSqrtReturnValue);
if (debrySqrtReturnValue == dotNetSqrtReturnValue)
isEqual = true;
else
isEqual = false;
if (isEqual)
testsPassed++;
else
testsFailed++;
testCasesExecuted++;
}
} while (userInput != 0);
Console.WriteLine("\n\n--------------------------------Report---------------------------------");
Console.WriteLine("test cases excecuted: {0}", testCasesExecuted);
Console.WriteLine("tests passed: {0}", testsPassed);
Console.WriteLine("tests failed: {0}", testsFailed);
Console.ReadLine();
}
// The Sqrt method
// Purpose: to compute the square root of a number
// Parameters: a positive, non-zero integer
// returns: a double, which is the square root of the number
// ---------------------------------------------------------
static double Sqrt(double number)
{
// constants to use in the calculation
const int FIRST_APPROX = 2;
const double EPS = 0.001;
// a local variable
double xN = 0;
// pick 2 as first approximation
double xNPlus1 = FIRST_APPROX;
do
{
xN = xNPlus1;
xNPlus1 = xN - ((xN * xN - number) / (FIRST_APPROX * xN));
} while (Math.Abs(xNPlus1 - xN) > EPS);
return xN;
}
}
答案 0 :(得分:5)
尝试设置const double EPS = 0.000000001;
- 那是你的epsilon。这就决定了答案的准确性。
答案 1 :(得分:3)
如果参数为负,Math.sqrt将返回NaN。此外,我认为EPS会小得多。