modf ( )【C语言库函数源代码】

C语言库函数源代码】

【本程序在Dev C++ 4.9.9.2 下编译通过】

/*

   将浮点数x分解成整数部分和小数部分。

   返回小数部分,将整数部分存入* iptr所指内存中。

*/

double my_modf01(double x, double *iptr)

{

   double ret = fmod(x,1.0);

   *iptr = x - ret;

   return ret;

}//这个函数算法比较简单,也容易让人理解。

 

//下面的这个函数理解起来就有点困难了。

 

typedef struct

{

   unsigned int mantissal:32;

   unsigned int mantissah:20;

   unsigned int exponent:11;

   unsigned int sign:1;

}double_t;//这个结构体在IEEE.h定义。

double my_modf02(double x, double *y)

{

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: trunc()函数是C语言中math.h库中自带的一个函数,函数的作用是截取一个浮点数的整数部分。 其标准源代码如下: ```c #include <math.h> double trunc(double x); ``` 这是一个非常简单的函数,只需要一个参数即可完成整数部分的截取操作。 具体实现细节如下: ```c double trunc(double x) { if (x < 0) { // 对于负数,向下取整的结果应该为比当前值小的最大的整数 return ceil(x); } else { // 对于正数,向下取整的结果应该为比当前值小的最小的整数 return floor(x); } } ``` 这里使用了C语言math.h库中的两个函数:ceil()和floor(),分别用于向上取整和向下取整。 需要注意的是,如果x是正数的话,向下取整的结果应该是比x小的最小整数,而不是比x小的最接近的整数。这一点需要特别注意。 总体来说,trunc()函数虽然非常简单,但是在数值计算中却是一个非常常用的函数。 ### 回答2: trunc函数是C语言标准库中的数学函数,用于将浮点数向零取整,即舍弃小数部分,只保留整数部分。其源代码如下: ```c double trunc(double x) { if (isnan(x)) return x; if (x == 0.0) return x; if (ceil(x) == x && x < 0.0) return x; return (x < 0.0) ? ceil(x) : floor(x); } ``` 函数接受一个浮点数x作为参数,返回一个双精度浮点数。该函数的实现分为四个步骤: 1. 如果x是NaN(不是数字),则函数直接返回x。 2. 如果x等于0.0(零),则函数直接返回x。 3. 如果x的向上取整等于x且x小于零,则函数直接返回x。这是为了处理一些浮点数可能存在的精度误差问题。 4. 否则,函数利用内置的取整函数ceil和floor将x向上取整或者向下取整,从而实现将x向零取整的效果。如果x小于零,则向上取整;否则向下取整。 上述代码中使用了浮点数比较时的一些技巧,如不直接使用==运算符判断两个浮点数是否相等,而是使用ceil函数。这是因为浮点数在计算机内部采用二进制表示,存在精度问题,直接进行比较可能会失败。因此,在实现数学函数时必须考虑这些特殊情况。 ### 回答3: C语言的标准trunc函数的源码如下: ```c #include <math.h> double trunc(double x) { if (isnan(x) || isinf(x)) { return x; } double integer_part; modf(x, &integer_part); return integer_part; } ``` trunc函数需要引用math.h头文件,它的作用是将一个double类型的数值x截取为整数部分。如果x为NaN(not a number)或者无穷大(infinity),那么直接返回x,否则调用modf函数截取整数部分并返回。在实现中,调用了modf函数,它的作用是将一个double类型的数值分解为整数部分和小数部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值