打印本文
关闭窗口
[注意]通达信整数减法有时会算错!
作者:通达信 来源:cxh99.com 发布时间:2013年09月21日
咨询内容:
两个整数相减 20130625 - 19000000 ,结果应该是1130625 ,可通达信算出来的却是 1130624!
很简单的测试,自定义指标
结果1:20130625 - 19000000;
结果2:20130708 - 19000000;
结果1是错误的,而结果2又是对的。
目前在内核5.85和5.83 我都发现了这样的问题,通达信连最基础的整数减法都能算错,还有什么不能算错的?
看图
此主题相关图片如下345.jpg:
通达信技术部:
这个问题确实是个严重的问题。很显然,它在内部是把两个整数估计用浮点数的方法来进行计算了。
通达信客服:
是的。数据类型所限,不支持8位整数。
网友交流:
以下是引用
vs9841
在2013-7-16 16:30:00的发言:
这个问题确实是个严重的问题。很显然,它在内部是把两个整数估计用浮点数的方法来进行计算了。
确如楼主所言,将20130625存在float中再输出就变成了20130624了。
一段c语言测试:
#include
#include
int main()
{
float a1 = 20130625 ;
printf("a1=%f\n",a1) ;
return 0;
}
网友交流:
官方到现在还没有出来解决这个问题 。。那个float换成double就可以。C语言中这个float类型通常是32位,其中有8位用于表示指数部分和符号。24位用于表示其余部份,其中C保证至少小数点后6位有效,按照浮点数在内存中表示方法。float类型转换整数精度应该是6+1 =7位,所以用float类型转换8位整数会损失很多精度,至少损失一半的8位整数精度。所以说这个问题非常严重
打印本文
关闭窗口