小数点精度丢失,可能是格式问题? C程序设计语言
Loss of precision on decimal, possible formatting issue? C programming language
我有一个作业要求我们通过确定一个点是在圆内还是圆外来计算圆周率。
我已完成作业,效果很好 - 除了我的答案总是四舍五入到小数点后第三位。其他同学精确到小数点后6位,我想知道我哪里错了。这是我的代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
int main() {
int square = 10; //this is the size of the square that contains the circle
int points = 1000; //this is how many points to test (how many times to run the loop)
double randX;
double randY;
int insideCircle = 0;
int outsideCircle = 0;
srand(time(NULL));
double radius = square / 2.0;
for (int i = 0; i < points; i++) {
randX = ((double)rand())/RAND_MAX * square;
randY = ((double)rand())/RAND_MAX * square;
if (( (pow(randX - radius,2.0)) + (pow(randY - radius,2.0))) < pow(radius,2.0)) {
insideCircle++;
} else {
outsideCircle++;
}
}
double pi = 4.0 * (double)insideCircle / (double)points;
printf("\n\nPi: %lf", pi);
return 0;
}
我认为我的错误在于我上次打印语句的格式,但我似乎无法确定!
感谢您的帮助!
你可以像这样指定小数点后6位
printf("\n\nPi: %.6lf", pi);
虽然正如@clcto 评论的那样,这是默认设置。
可能小数点后3位四舍五入是因为测试了1000分
这里没有任何问题。您正在随机选择 1000 个点,然后使用以下公式计算 π:
double pi = 4.0 * (double)insideCircle / (double)points;
由于points
等于1000,你会得到一个小数点后三位的结果。
我有一个作业要求我们通过确定一个点是在圆内还是圆外来计算圆周率。
我已完成作业,效果很好 - 除了我的答案总是四舍五入到小数点后第三位。其他同学精确到小数点后6位,我想知道我哪里错了。这是我的代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
int main() {
int square = 10; //this is the size of the square that contains the circle
int points = 1000; //this is how many points to test (how many times to run the loop)
double randX;
double randY;
int insideCircle = 0;
int outsideCircle = 0;
srand(time(NULL));
double radius = square / 2.0;
for (int i = 0; i < points; i++) {
randX = ((double)rand())/RAND_MAX * square;
randY = ((double)rand())/RAND_MAX * square;
if (( (pow(randX - radius,2.0)) + (pow(randY - radius,2.0))) < pow(radius,2.0)) {
insideCircle++;
} else {
outsideCircle++;
}
}
double pi = 4.0 * (double)insideCircle / (double)points;
printf("\n\nPi: %lf", pi);
return 0;
}
我认为我的错误在于我上次打印语句的格式,但我似乎无法确定!
感谢您的帮助!
你可以像这样指定小数点后6位
printf("\n\nPi: %.6lf", pi);
虽然正如@clcto 评论的那样,这是默认设置。
可能小数点后3位四舍五入是因为测试了1000分
这里没有任何问题。您正在随机选择 1000 个点,然后使用以下公式计算 π:
double pi = 4.0 * (double)insideCircle / (double)points;
由于points
等于1000,你会得到一个小数点后三位的结果。