| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1836 人关注过本帖
标题:小辣鸡上桌[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
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:5 
我试了,d不是1
2017-11-13 22:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册: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
快速回复:小辣鸡上桌[em04]
数据加载中...
 
   



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

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