用double定义函数,返回类型为float

Klingonsss 2016-03-25 10:16:52
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
/*************found**************/
double fun(int k)
{
int n; float s, w, p, q;
n=1;
s=1.0;
while(n<=k)
{
w=2.0*n;
p=w-1.0;
q=w+1.0;
s=s*w*w/p/q;
n++;
}
/*************found**************/
return s;
}
void main()
{ system("CLS");
printf("%f\n ",fun(10));
}
不是说返回值要和函数定义类型一样么
...全文
2606 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 paschen 的回复:
再强调一下,楼主这种不会丢失精度!楼主的是float转double!
中间的运算精度损失了。
bluewanderer 2016-04-01
  • 打赏
  • 举报
回复
引用 11 楼 butters10 的回复:
%f 强转成float了,其实你函数还是返回的double的
%f是double
lm_whales 2016-03-30
  • 打赏
  • 举报
回复
这种函数,返回 double 基本上是误导大家。 计算本身,精度低,返回值精度高 纯粹胡闹, 改为返回 double 并不能提高 计算的精度。 如果函数都这么写,干脆只保留一种浮点数好了。
stephen_csdn 2016-03-30
  • 打赏
  • 举报
回复
%f 强转成float了,其实你函数还是返回的double的
赵4老师 2016-03-30
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!) VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
qq_29499869 2016-03-27
  • 打赏
  • 举报
回复
引用 7 楼 qq_34438761 的回复:
如果fun函数是float行,变量定义成double型呢?会出错吗?如果在全国二级考试里会不会被扣分?
double转float编译器会发出警告,但是可以通过编译,考试的话可能会扣分。 这种情况一般要求都是“所需类型”或者“能转换成需要的类型”,楼主提出情况是float转double,可以默认转换,而且不会丢失精度,所以一般连警告都不会有,实际情况是无所谓的,但是考试就不一定了。
paschen 2016-03-26
  • 打赏
  • 举报
回复
再强调一下,楼主这种不会丢失精度!楼主的是float转double!
qq_34438761 2016-03-26
  • 打赏
  • 举报
回复
如果fun函数是float行,变量定义成double型呢?会出错吗?如果在全国二级考试里会不会被扣分?
???????2016 2016-03-25
  • 打赏
  • 举报
回复
会丢失精度,其实返回值内存块还是double ,只不过显示float 所占用到的内存块
trytry1992 2016-03-25
  • 打赏
  • 举报
回复
这样是语法上是可以的,只不过有可能数据丢失,因为double的精度比float高
shi789789789 2016-03-25
  • 打赏
  • 举报
回复
理论上可以,但会丢失精度,最好不要这么干,可以强制转换
orannnn 2016-03-25
  • 打赏
  • 举报
回复
编译器会把双精度转化为单精度返回,所以会损失掉一位小数,所以最好也用double返回
paschen 2016-03-25
  • 打赏
  • 举报
回复
返回时会时行隐式转换,所以编译不会报错 另外float转换为double并不会丢失精度

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧