标题:小辣鸡上桌[em04]
只看楼主
yQA
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-11-4
结帖率:50%
已结贴  问题点数:20 回复次数:4 
小辣鸡上桌[em04]
#include <stdio.h>
#include <math.h>

double dist( double x1, double y1, double x2, double y2 );

int main()
{   
    double x1, y1, x2, y2;

    scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
    printf("dist = %.2f\n", dist(x1, y1, x2, y2));

    return 0;
}

double dist( double x1, double y1, double x2, double y2 ){
    int c=0;
    double d=0;
    c=(double)pow((x1-x2),2)+ (double)pow((y1-y2),2);
    d=(double)pow(c,0.5);
    return  d;
}
能帮我看一下为什么d总是为1呢??
搜索更多相关主题的帖子:  double int return pow 
2017-11-13 19:40
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:5 
我试了,d不是1
2017-11-13 22:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
首先,正如 zbjzbj 所言,根本不是“为什么d总是为1?”,对于自己提的问题就不能认真些?就不能明确地讲“我输入0 0 3 4,期待输出5.00,为什么实际输出是 1 呢”?

然后看你的代码
scanf("%lf %lf %lf %lf" 之间为什么要加空格呢?虽然是个小问题
(double)pow((x1-x2),2) 之类,为什么要将double强转为double?
int c=0; 你明明用的都是浮点数,怎么又要截断为整型?
int c=0; c=……; 为什么不按C标准建议的那样写成 int c = ……; ?
明明是(x1-x2)*(x1-x2),为什么用 pow((x1-x2),2) ?你是不是觉得数学上它俩相等,实际运行时也没什么差别,所以就可以瞎写?
明明是sqrt(c),为什么用 pow(c,0.5) ?同上,C标准是闲得没事做,才增加sqrt/cbrt等函数?
当你使用 (x^2 + y^2)^0.5 这个算法求距离时,有没有想过中间过程(即 x^2 + y^2 )会丢失精度,会溢出?只是问问,没责怪你,所以C标准才提供 hypot 函数专门来干这事。

如果在你原来的代码上改,就是:
程序代码:
#include <stdio.h>
#include <math.h>

double dist( double x1, double y1, double x2, double y2 );

int main( void )
{
    double x1, y1, x2, y2;
    scanf( "%lf%lf%lf%lf", &x1, &y1, &x2, &y2 );

    printf( "dist = %.2f\n", dist(x1,y1,x2,y2) );
}

double dist( double x1, double y1, double x2, double y2 )
{
    return sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );
    // 以上未考虑精度丢失和溢出的问题,正确的做法应该是
    // return hypot( x1-x2, y1-y2 );
}

2017-11-14 09:04
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
得分:5 
回复 3楼 rjsp
好久不见,版主早上好!
你是本坛贵人!现在估计班主仼也难得这么用心负责。



www.qunxingw.wang
2017-11-14 10:13
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:5 
回复 3楼 rjsp
厉害学习了hypot函数~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-14 11:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-482450-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.329046 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved