鱼C论坛

 找回密码
 立即注册
查看: 4307|回复: 7

有个问题问大神

[复制链接]
发表于 2013-4-24 10:53:17 | 显示全部楼层 |阅读模式
1鱼币
        先问个问题,是不是精确的计算不能使用float型数据?
        因为看见个问题是
     ...
     int i,k;
     k=sqrt(i);
    ...
    作者说,这是不对的写法,因为  sqrt()的函数原型是  double sqrt (double )   ,既返回值和参数类型都是double型,把整型放进去的话,会发生类型转换,而浮点型数据时一种近似值,不能用于精确的计算,例如  sqrt(9)得到的可能是3.000000也有可能是2.999999.(视编译器而定)
      如果问题是要得到i的开方的整数部分,岂不是这种用sqrt()就是一种不对的用法。
     那么我的疑惑来了,既然是不对的用法,为什么还有这个库函数,岂不是多此一举。既然有这个库函数那么就有它德作用,它德作用到底是什么,它德作用条件和范围又是什么
       求大神指教啊!

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-24 10:56:59 | 显示全部楼层
存在即合理    但要我说出个所以然 我也不知道了   不过帮你顶顶  看有没有大神来帮忙
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-24 11:00:29 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-24 11:05:52 | 显示全部楼层
不对是说你把 一个double 赋值给 int
你这样
double  d = sqrt(4.0);
没人说不对
谁说你就削谁
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-24 12:24:29 | 显示全部楼层
      我去网上搜所了一下,作者说得一点都没有错,详见这个地址http://blog.163.com/yaoyiyan_3y/blog/static/186083580201182324412336/
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-24 13:01:25 | 显示全部楼层
因为int和double精度不一样!你把int k.定义为double k就可以了!其实不是double也没错!就是精度不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-26 13:52:43 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-26 19:45:45 | 显示全部楼层
这个问题已经解决了   怎么标 记为已解决
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-31 22:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表