关于类型的转换-2015-01-09
来源:互联网 发布:巴贝拉网络订餐 编辑:程序博客网 时间:2024/05/12 19:12
关于类型的转换-2015-01-09
多年以前,在一本书上看到 “对图片的缩小在放大,图片会变模糊” 当时并没细想。
PART 1:
最近遇到一个问题,运算的数据太大,导致的异常。去掉其他的一些参数的 最后精简就是 D=A*B/C
int A、D、B、C 其中 A能够达到3300万,B能够达到1万,C能够达到2万。 D算出来能够达到 1100万(一个32位的数据长度之内).一切看似完全合理。但是实际得到的结果,却完全不是想要的。可能只有几百 或者 几十 。
初步假设是因为A*B,超过了一个范围 。
从运算结果看,数据完全是在范围内。完全合理。D 完全能够存储的下。 那么可能出现问题的地方,应该是在计算的过程中出现的。
验证这个假设
在运算开始前,把数据对应的先缩小, 再进行计算,计算完后,再进行放到。事实证明 这个方法真的可行。
有个缺陷,就是在缩小之后再放大的时候,原来的精度就丢失了。不过3300万大小,精确度确实没那么高的必要。
因此这个方法是可行的
故事这样结束了,却还是有个疑问。 没什么在计算的过程中,数据会溢出?
PART 2:
虽然用一种方式把问题解决了。却没看到在什么情况下,会再次引发这类情况。
终于在书籍中找到了解释:
如果在运算的过程中,最长的为int,只会转换成int。 也就是说,计算公式一直在以int的大小,进行运算。
( 在印象中,计算时会自动放大,int *int 会转换成double)
附上:图片
问题的关键终于找到了。(found the key .找到了一把钥匙)
那么 只需要将 a,b,c,d 全部换成 double,将可以完美的解决。这样将省掉 中间的放大和放小的运算。
蛋炒饭最简单,也最困难。有些基础的东西还是很重要的。
那么 只需要将 a,b,c,d 全部换成 double,将可以完美的解决。这样将省掉 中间的放大和放小的运算。
蛋炒饭最简单,也最困难。有些基础的东西还是很重要的。
附上:图片
#include"stdio.h"
int main(){
int intt;
unsigned int a,c;
double d,b;
a=30000000;
b=10000;
c=20000;
d=a*b/c;
c=20000;
d=a*b/c;
printf("double %d\n",sizeof(double));
printf("float %d\n",sizeof(float));
printf("int %d\n",sizeof(int));
printf("unsigned short int %d\n",sizeof(short int));
printf("unsigned long %d\n",sizeof(long int));
printf("%.0f",d);
}
thxy
zhjmyx@qq.com
2015-01-09 17:01:30 于安徽
printf("float %d\n",sizeof(float));
printf("int %d\n",sizeof(int));
printf("unsigned short int %d\n",sizeof(short int));
printf("unsigned long %d\n",sizeof(long int));
printf("%.0f",d);
}
thxy
zhjmyx@qq.com
2015-01-09 17:01:30 于安徽
0 0
- 关于类型的转换-2015-01-09
- 关于类型的转换
- 关于vb的类型转换
- 关于struts2的类型转换
- 关于datatime类型的转换
- 关于类型转换的实验
- 关于uuid类型的转换
- 关于struts的类型转换
- 一篇关于CString类型转换的文章
- 关于强制类型转换的若干方法
- 关于指针强制类型转换的思考
- 关于类型转换的简单了解
- .NET 关于类型转换的是是非非
- 关于指针强制类型转换的思考
- 关于struts2中类型转换的认识
- c++的点点滴滴(1)----关于类型转换
- 关于日期类型转换的标准SQL
- 关于类型转换的一件小事
- 一文读懂机器学习,大数据/自然语言处理/算法全有了
- 使用opencv实现车辆的检测与跟踪
- Android 性能优化之使用MAT分析内存泄露问题
- libxml2库函数详解
- apk反编译(一)
- 关于类型的转换-2015-01-09
- .net实现oracle数据库中获取新插入数据的id的方法
- Python Popen communicate()和wait()使用上的区别
- i2c 可能用到错误
- incompatible pointer types assigning to 'nsmutablearray ' from 'nsarray '
- pylibcurl之https搜索引擎之网络数据抓取小例子,302moved?google搜索引擎不让你抓搜索结果??ok,此文问题通通解决
- BZOJ 3218 a + b Problem 可持久化线段树+最小割
- php实现自动获取生成关键词功能
- 如何获取Android移动终端设备唯一ID