| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 148 人关注过本帖
标题:小辣鸡上桌[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呢??
2017-11-13 19:40
zbjzbj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:郑州
等 级:版主
威 望:6
帖 子:217
专家分:1024
注 册:2011-4-22
  得分:5 
我试了,d不是1
2017-11-13 22:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:215
帖 子:5200
专家分:28689
注 册: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
帖 子:1669
专家分:7284
注 册:2011-6-30
  得分:5 
回复 3楼 rjsp
好久不见,版主早上好!
你是本坛贵人!现在估计班主仼也难得这么用心负责。



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

[code]/*~告诫自己:不要为了细微的效率差别而牺牲可读性!~2017-11-07更~*/[/code]
2017-11-14 11:10







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

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