目前在程序中遇到一些"怪"问题,还望各位帮帮忙!
问题如下:
1、在codewarrior中将一个long型的变量赋给一个double型的变量时数据就出现了错误!
eg: long a=229525213;
double r=0;
r=a; //调试程序时查看到r的值为:229525216 ,转换后数据就出现了这种差错!!!
2、在codewarrior中对一个double型的大数进行除以100的运算后在赋给一个double型的数据后就错了!
eg: double a=232608096;
double b=a/100; // //调试程序时查看到b的值为:2326081.00000 ,计算后数据就出现了这种差错!!!
3、在codewarrior中将一个大数赋给一个double型变量时调试程序查看变量值时小数点后的数据显示不出来,但直接在查看变量处给它加上一个小数,它就能将值后面的小数部分显示出来,真的很“奇怪”,不知为何会出现这种现象?
eg: double n=4187645632.1325; //调试程序时查看到n的值为:4187645632.00000; 小数部分没显示出来
//但表达式:n+0.23589 的值为:4187645632.23589;小数部分显示出来
double m=n+0.23589; ////调试程序时查看到m的值为:4187645632.00000; 小数部分仍没显示出来
望各位朋友帮忙看一下,谢谢了!
这跟浮点数精度有关,误差是正常的。
" Edit " -> "( Target Name )Setting " -> " Target " -> " Compiler for ..... " -> " Type Sizes "
这里面有设置double类型的定义,默认的是32bit的,跟float一样,如果选的是64bit的话,精度会更高一点,不过数太大的话就很难说了....
[此贴子已经被作者于2008-9-23 16:59:09编辑过]
兄弟,我在软件中没有找到
" Edit " -> "( Target Name )Setting " -> " Target " -> " Compiler for ..... " -> " Type Sizes ",能具体说明一下在哪能找到吗?
我用的是CW8.0,片子是MC56F8037
我用的是4.6和6.1版本的,都有这个选项,8.0的倒没用过,应该差不多的。
4.6版:
" Edit " -> " P&E Multilink CyclonePro Settings " -> " Target " -> " Compiler for HC12 " -> " Type Sizes "
6.1版:
" Edit " -> " Standard Settings... " -> " Target " -> " Compiler for HC08 " -> " Type Sizes "
8.0的话应该是类似的,你找找看吧。
谢谢兄弟了,在CW8.0里还是没有找到设置类型大小的设置键
可能是我们用的数据太大了,我们用到上亿的数据,不过这点误差对我们控制影响不是很大.可能与编译器也有关系,在VC里不会出现这种情况.
再次感谢.
[此贴子已经被作者于2008-9-25 11:51:17编辑过]
把double改成64bit能解决问题,我试过了
[此贴子已经被作者于2008-9-25 12:51:42编辑过]
谢谢fayefayehoo兄弟,看来CW8.0编译器还不完善,CW8.0中在Target一栏中只有你这个版本中的前5个,找不到设置数据类型的那栏,在别的地方也找了好久还是没有找到.看来什么时候能完善成你用的这个版本.
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |