C语言pow()函数问题。

请问pow()函数的参数不定义成double类型,而定义成其他类型到底可不可以呢?... 请问pow()函数的参数不定义成double类型,而定义成其他类型到底可不可以呢? 展开
 我来答
White_MouseYBZ
2014-03-06 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6602万
展开全部
朋友,pow函数的原型是double pow(double x,double y),返回值是double型的x的y次方的值。对于形参x、y,传入比double型“短”的实参是正常的且不告警。这是因为,C/C++有约定,当一个“短”型值赋给一个“长”型值时,自动将“短”型值提升为“长”型值。所以你这里用两个int型的变量a、b充当pow的实参是完全合理合法的。但是,把pow(a,b)的返回值赋给int型变量c就不完全合法了,因为这是把“长”型值赋给一个“短”型值,会有精度损失,所以系统要提醒你是否出错了,就要警告。解决办法当然是把c声明为double型;但如果逻辑上只需要返回值的整数部分的话也可以c=(int)pow(a,b);。这样系统就知道你是有意取整,而不是疏忽,就不会告警了。仅供参考……
追问
也就是说,占字节少的类型值可以赋给占字节多的类型的变量,而占字节多的类型的值赋给占字节少的类型的变量,比如double a=3.000000;int b;b=a;这样的就会报错是吧?
追答
理解OK!不过不error,只是warning……
匿名用户
推荐于2017-12-16
展开全部
应该可以的,不过如果从浮点型到整型,小数点后面的数据会丢失的,造成精度不准确。你的程序里实参a,b,c都是整型,所以会有warning,数据精度丢失。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
古尔格
2014-03-06 · TA获得超过627个赞
知道小有建树答主
回答量:300
采纳率:50%
帮助的人:260万
展开全部
//楼下的说的都对,那我给你提供一个另外的方法的,直接不使用math头文件里的函数,利用其原理自己编写一个可以随意改变类型的函数。
//↓↓↓这是int的。
#include<stdio.h>
int pow(int x,int y)
{
    int z=1;
    for(;y>0;y--)
        z*=x;
    return z;
}
void main()
{
    int a=2,b=3;
    printf("%d",pow(a,b));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
落花有情1996
2014-03-06 · 超过20用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:33.6万
展开全部
这个是不行的,但你可以强制转化为int
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2023-06-28
展开全部
在计算很大的数时程序会有计算损失
例如pow(10,2)在某些情况下计算出来可能是99.9999999990之类的数,比100小一点,当你强转为int时会变成99,类似这种情况,在计算大数时更可能发生。
解决办法是加一个小数,比如(int)(pow(10,2)+0.1),结果就正常了,当然也可能因为这个小数出现大一的问题,原因同上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式