linux中double大小,linux 下 float 和 double 精度计算差别
今天在根据需求写代码时候,偶尔发现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 精度计算差别相关推荐
- 深入探讨:linux中遍历文件夹下的所有文件
深入探讨:linux中遍历文件夹下的所有文件 http://www.jb51.net/article/37664.htm
- linux中非法内存,Linux下数组非法访问导致内存破坏 —— 引发segmentation fault的原因...
2012-02-05 wcdj 1, 调试时必需的栈知识 2, 数组非法访问导致内存破坏 调试时必需的栈知识 栈(stack)是程序存放数据的内存区域之一,其特征是LIFO(Last In First ...
- linux线程堆分配,如何在Linux中的相同进程下为线程分配堆栈或内存
Linux中当前的"线程"概念是 NPTL. NPTL使用 clone(),包装 sys_clone().为新的'线程'分配堆栈在用户空间(即libc)中处理,而不是在内核(即Li ...
- linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道
Linux 管道对阻塞之前一次写操作的大小有限制. 专门为每个管道所使用的内核级缓冲区确切为 4096 字节. 除非阅读器清空管道,否则一次超过 4K 的写操作将被阻塞. 实际上这算不上什么限制,因为 ...
- linux中vi权限,Linux下文件权限、用户组、VI命令
mkdir命令选项说明 命令中的[选项]一般有以下两种: -m 用于对新建目录设置存取权限,也可以用 chmod 命令进行设置. -p 需要时创建上层文件夹(或目录),如果文件夹(或目录)已经存在,则 ...
- linux中 samba服务器配置,linux下samba服务器安装配置方法
linux中samba服务器的安装及其配置,供大家参考,具体内容如下 第一步:下载samba 命令:apt-get install samba apt-get install cifs-utils a ...
- linux中比较大小的符号,linux shell中的比较符号与特殊符号介绍
shell字符串比较.判断是否为数字 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 整数比较 -eq 等于,如:if [ "$a" -eq "$b&qu ...
- Linux进程缓冲区大小,Linux IOCTL动态命令、动态|自定义缓冲区大小、IOCTL使用大缓冲区的问题...
深夜睡不着,点根烟起来写点儿东西吧. 一个驱动程序除了具备读写设备的能力之外,其也应当具有对硬件控制的能力.在Windows下用户层代码使用API函数DeviceIoControl,通过传入驱动句柄, ...
- linux中文件大小10,Linux之查看文件大小
1.查看当前文件大小du -sh ./ du [-abcDhHklmsSx] [-L ][-X ][--block-size][--exclude=] [--max-depth=][--help][- ...
最新文章
- 一分钟就可以轻松将文字转换成语音,简单方法讲解
- 一个 提高SQL 查询的讨论帖
- 总结了C#中string.format用法。分享给大家供大家参考。具体分析如下:
- 11、oracle数据库下的事务和触发器
- C++学习笔记(一)
- 集合之ArrayList(含JDK1.8源码分析)
- SAS在金融中的应用二
- UVa-10382 Watering Grass **
- 网络实用技术基础模拟测试2_网络安全工程师教你:Kali Linux之Metasploit渗透测试基础(五)...
- ES6中的const命令【转】
- hadoop学习笔记(五):java api 操作hdfs
- Scrapyd API的安装
- CTF web题常用解题工具
- 常用RGB颜色表 色值
- 二维码在线制作免费快速
- java 余弦值_获取Java中给定值的双曲余弦值
- Adlik发布v0.1.0(Antelope羚羊)版本,赋能深度学习模型产业化
- Aria2一键安装及管理脚本,搭建AriaNg前端
- IOS开发之——AFN-网络状态监控(04)
- 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
热门文章
- [LUOGU] 1090 合并果子
- [魔方]28秒!地铁站真是个破纪录的好地方
- Elixir: 开发和发布Elixir库
- centos安装ssdb
- [置顶] C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。...
- SharePoint 2010 技巧系列: 控制Ribbon菜单权限(SiteActions的例子)
- 2008秋-计算机软件基础-第四章习题参考答案 P131 ,习题6之一
- mysql 5.7_MySQL 5.7新特性介绍
- java8循环怎么给全局变量累加_JAVA使用for循环会重复调用list.size()吗?
- SQL优化|Java面试题