如何测试一个数的平方根是否合理?

Ale*_*lan 10 math objective-c

你如何测试一个数字的平方根是否合理?

这甚至可能吗?

我需要这个,因为我需要弄清楚是否在我正在开发的数学应用程序中显示一个数字作为一个数字.

thi*_*ton 6

对于整数输入,只有平方数的平方根是有理数.因此,您的问题可归结为查找您的号码是否为正方形.比较问题:确定输入是否是完美正方形的好算法是什么?.

如果您将有理数作为输入(即,以两个整数之间的比率给出的数字),请检查除数和被除数是否为完美正方形.

对于浮点值,可能没有解决方案,因为您无法使用截断的十进制表示来检查数字是否合理.

  • -1:你已经忘记了可以在_any_数字上取平方根,而不仅仅是整数.Quoth维基百科:[x的平方根是有理的,当且仅当x是一个有理数,可以表示为两个完美正方形的比率.](http://en.wikipedia.org/wiki/Square_root). (2认同)

Luk*_*man 2

在阅读评论和我提出的另一个问题的答案后,我意识到问题来自浮点不准确,这意味着某些值(例如 0.01)将在程序结束时无法通过逻辑测试。我已将其修改为使用NSDecimalNumber变量。

double num, originalnum, multiplier;
int a;

NSLog(@"Enter a number");
scanf("%lf", &num);
//keep a copy of the original number
originalnum = num;

//increases the number until it is an integer, and stores the amount of times it does it in a
for (a=1; fmod(num, 1) != 0 ; a++) {
    num *= 10;
}

a--;
//when square-rooted the decimal points have to be added back in
multiplier = pow(10, (a/2));
if (fmod(originalnum, 1) != 0) {
    multiplier = 10;
}

NSDecimalNumber *temp = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithDouble:sqrt(num)/multiplier] decimalValue]];
NSDecimalNumber *result = [temp decimalNumberByMultiplyingBy:temp];
NSDecimalNumber *originum = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithDouble:originalnum] decimalValue]];

if ((fmod(sqrt(num), 1) == 0) && ([result isEqualToNumber:originum])) {
    NSLog(@"The square root of %g is %@", originalnum, temp);
}
else {
    NSLog(@"The square root of this number is irrational");
}
Run Code Online (Sandbox Code Playgroud)