【求大佬解惑】

三舞 石家庄铁道大学 2019-06-24 09:03:04
这个数值为啥会是这样
...全文
68 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
三舞 2019-06-25
引用 5 楼 android2008的回复:
[quote=引用 4 楼 weixin_45024354 的回复:]
[quote=引用 3 楼 android2008的回复:]pow接受的参数和返回的值是double类型的,int类型和double类型互转会有精度问题,那些99999999就是因为这个原因,要避免这个问题,可以把pow的返回值加一个小的小数,比如 0.000001再转成整数 a=pow(10,i) + 0.000001
另外楼上说的,int表示的数是有限的,表示不了10的10次方,所以后面出来的是负数
你需要改成long long或64位int类型,相应的printf里也需要把%d改成对应的格式

就是说9999是因为精度造成的,最后一个负数是存不下10^10。把a定义成双精度就可以解决999999的问题对吧[/quote]
前半段对的
但把a定义成double不一定能解决问题,如果你需要输出整数的话。[/quote] 嗯嗯,谢谢老哥,我自个再去试试
回复
android2008 2019-06-25
引用 4 楼 weixin_45024354 的回复:
[quote=引用 3 楼 android2008的回复:]pow接受的参数和返回的值是double类型的,int类型和double类型互转会有精度问题,那些99999999就是因为这个原因,要避免这个问题,可以把pow的返回值加一个小的小数,比如 0.000001再转成整数 a=pow(10,i) + 0.000001
另外楼上说的,int表示的数是有限的,表示不了10的10次方,所以后面出来的是负数
你需要改成long long或64位int类型,相应的printf里也需要把%d改成对应的格式

就是说9999是因为精度造成的,最后一个负数是存不下10^10。把a定义成双精度就可以解决999999的问题对吧[/quote]
前半段对的
但把a定义成double不一定能解决问题,如果你需要输出整数的话。
回复
三舞 2019-06-25
引用 3 楼 android2008的回复:
pow接受的参数和返回的值是double类型的,int类型和double类型互转会有精度问题,那些99999999就是因为这个原因,要避免这个问题,可以把pow的返回值加一个小的小数,比如 0.000001再转成整数 a=pow(10,i) + 0.000001
另外楼上说的,int表示的数是有限的,表示不了10的10次方,所以后面出来的是负数
你需要改成long long或64位int类型,相应的printf里也需要把%d改成对应的格式
就是说9999是因为精度造成的,最后一个负数是存不下10^10。把a定义成双精度就可以解决999999的问题对吧
回复
android2008 2019-06-25
pow接受的参数和返回的值是double类型的,int类型和double类型互转会有精度问题,那些99999999就是因为这个原因,要避免这个问题,可以把pow的返回值加一个小的小数,比如 0.000001再转成整数 a=pow(10,i) + 0.000001
另外楼上说的,int表示的数是有限的,表示不了10的10次方,所以后面出来的是负数
你需要改成long long或64位int类型,相应的printf里也需要把%d改成对应的格式
回复
C语言小白008 2019-06-25
int不够大,你可以改成long类型试一下
回复
三舞 2019-06-24
还有一个问题是不是pow不能直接用在输出语句中
回复
发帖
其它技术问题
创建于2007-09-28

3842

社区成员

C/C++ 其它技术问题
申请成为版主
帖子事件
创建了帖子
2019-06-24 09:03
社区公告
暂无公告