今天在根据需求写代码时候,偶尔发现linux 下 设置变量类型 float 和double 计算时,

得到的结果是不一样的。

要求: 设定值 = 传入值 * 10 * 122.88 /1000;

case: 设定值 = 1666*10*122.88/1000

= 2047.1808

设置成 float时,代码:

#include

#include

unsigned int fun(unsigned int sfn_threshold)

{

float f_sfn_threshold;

printf("input parameter=%d\n",sfn_threshold);

f_sfn_threshold = (float)sfn_threshold*1.2288;

printf("f_sfn_threshold = %8lf\n",f_sfn_threshold);

printf("%.8lf\n",fabs(f_sfn_threshold -(unsigned int)f_sfn_threshold ));

return 0;

}

int main(int argc, char **argv)

{

unsigned int a=1666;

unsigned int b=10000;

unsigned int c=12888;

unsigned int d=65535;

fun(a);

return 0;

}

执行结果(与要得到的结果不一致):

[root@localhost test_float_compare]# gcc test_float_double_diff.c -o test_float_double_diff_1666

[root@localhost test_float_compare]#

[root@localhost test_float_compare]# ./test_float_double_diff_1666

input parameter=1666

f_sfn_threshold = 2047.180786

0.18078613

[root@localhost test_float_compare]#

设置成 double时,代码:

#include

#include

unsigned int fun(unsigned int sfn_threshold)

{

double f_sfn_threshold;

printf("input parameter=%d\n",sfn_threshold);

f_sfn_threshold = (double)sfn_threshold*1.2288;

printf("f_sfn_threshold = %8lf\n",f_sfn_threshold);

printf("%.8lf\n",fabs(f_sfn_threshold -(unsigned int)f_sfn_threshold ));

return 0;

}

int main(int argc, char **argv)

{

unsigned int a=1666;

unsigned int b=10000;

unsigned int c=12888;

unsigned int d=65535;

fun(a);

return 0;

}

执行结果:

[root@localhost test_float_compare]#

[root@localhost test_float_compare]# ./test_float_double_diff_1666

input parameter=1666

f_sfn_threshold = 2047.180800

0.18080000

[root@localhost test_float_compare]#

linux中double大小,linux 下 float 和 double 精度计算差别相关推荐

  1. 深入探讨:linux中遍历文件夹下的所有文件

    深入探讨:linux中遍历文件夹下的所有文件 http://www.jb51.net/article/37664.htm

  2. linux中非法内存,Linux下数组非法访问导致内存破坏 —— 引发segmentation fault的原因...

    2012-02-05 wcdj 1, 调试时必需的栈知识 2, 数组非法访问导致内存破坏 调试时必需的栈知识 栈(stack)是程序存放数据的内存区域之一,其特征是LIFO(Last In First ...

  3. linux线程堆分配,如何在Linux中的相同进程下为线程分配堆栈或内存

    Linux中当前的"线程"概念是 NPTL. NPTL使用 clone(),包装 sys_clone().为新的'线程'分配堆栈在用户空间(即libc)中处理,而不是在内核(即Li ...

  4. linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道

    Linux 管道对阻塞之前一次写操作的大小有限制. 专门为每个管道所使用的内核级缓冲区确切为 4096 字节. 除非阅读器清空管道,否则一次超过 4K 的写操作将被阻塞. 实际上这算不上什么限制,因为 ...

  5. linux中vi权限,Linux下文件权限、用户组、VI命令

    mkdir命令选项说明 命令中的[选项]一般有以下两种: -m 用于对新建目录设置存取权限,也可以用 chmod 命令进行设置. -p 需要时创建上层文件夹(或目录),如果文件夹(或目录)已经存在,则 ...

  6. linux中 samba服务器配置,linux下samba服务器安装配置方法

    linux中samba服务器的安装及其配置,供大家参考,具体内容如下 第一步:下载samba 命令:apt-get install samba apt-get install cifs-utils a ...

  7. linux中比较大小的符号,linux shell中的比较符号与特殊符号介绍

    shell字符串比较.判断是否为数字 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 整数比较 -eq 等于,如:if [ "$a" -eq "$b&qu ...

  8. Linux进程缓冲区大小,Linux IOCTL动态命令、动态|自定义缓冲区大小、IOCTL使用大缓冲区的问题...

    深夜睡不着,点根烟起来写点儿东西吧. 一个驱动程序除了具备读写设备的能力之外,其也应当具有对硬件控制的能力.在Windows下用户层代码使用API函数DeviceIoControl,通过传入驱动句柄, ...

  9. linux中文件大小10,Linux之查看文件大小

    1.查看当前文件大小du -sh ./ du [-abcDhHklmsSx] [-L ][-X ][--block-size][--exclude=] [--max-depth=][--help][- ...

最新文章

  1. 一分钟就可以轻松将文字转换成语音,简单方法讲解
  2. 一个 提高SQL 查询的讨论帖
  3. 总结了C#中string.format用法。分享给大家供大家参考。具体分析如下:
  4. 11、oracle数据库下的事务和触发器
  5. C++学习笔记(一)
  6. 集合之ArrayList(含JDK1.8源码分析)
  7. SAS在金融中的应用二
  8. UVa-10382 Watering Grass **
  9. 网络实用技术基础模拟测试2_网络安全工程师教你:Kali Linux之Metasploit渗透测试基础(五)...
  10. ES6中的const命令【转】
  11. hadoop学习笔记(五):java api 操作hdfs
  12. Scrapyd API的安装
  13. CTF web题常用解题工具
  14. 常用RGB颜色表 色值
  15. 二维码在线制作免费快速
  16. java 余弦值_获取Java中给定值的双曲余弦值
  17. Adlik发布v0.1.0(Antelope羚羊)版本,赋能深度学习模型产业化
  18. Aria2一键安装及管理脚本,搭建AriaNg前端
  19. IOS开发之——AFN-网络状态监控(04)
  20. 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告

热门文章

  1. [LUOGU] 1090 合并果子
  2. [魔方]28秒!地铁站真是个破纪录的好地方
  3. Elixir: 开发和发布Elixir库
  4. centos安装ssdb
  5. [置顶] C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。...
  6. SharePoint 2010 技巧系列: 控制Ribbon菜单权限(SiteActions的例子)
  7. 2008秋-计算机软件基础-第四章习题参考答案 P131 ,习题6之一
  8. mysql 5.7_MySQL 5.7新特性介绍
  9. java8循环怎么给全局变量累加_JAVA使用for循环会重复调用list.size()吗?
  10. SQL优化|Java面试题