搜索
bottom↓
回复: 34

问一下大家如何在高级语言里处理10进制数和10进制运算呢

[复制链接]

出0入0汤圆

发表于 2014-5-16 10:57:48 | 显示全部楼层 |阅读模式
汇编写10进制运算好写,因为很多单片机都支持10进制运算指令, 但对一些高级语言, 如C之类的, 这个并不支持10进制类型的数据, 在精度高的条件下,运算尽可能的小,大家一般是怎样做的呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-5-16 11:03:10 | 显示全部楼层
仔细说说,c怎么不支持10进制了。

出0入93汤圆

发表于 2014-5-16 11:08:33 | 显示全部楼层
语不惊人死不休
继N多C语言小白发现了N多编译器的BUG之后,LZ又发扬光大百尺竿头更进一步搞出了更NX的创举,填补了世界空白……

出0入0汤圆

发表于 2014-5-16 11:21:36 | 显示全部楼层
c怎么不支持10进制了。

出0入0汤圆

发表于 2014-5-16 11:29:22 | 显示全部楼层
大虾,世界只有一种进制,叫做二进制,哪有什么4进制8进制10进制?



高级语言“不会”处理进制,因为不需要!程序执行时一定是2进制的,一定一定是2进制的,其他进制的计算机还没造出来呢,楼主可以造出来大家围观。

出0入42汤圆

发表于 2014-5-16 11:32:09 | 显示全部楼层
除了数据文本化以及文本数据化的时候, 我实在不知道讲进制到底在说什么

出0入22汤圆

发表于 2014-5-16 11:36:18 | 显示全部楼层
都混到这种等级的ID竟然还能问这种问题,菊花欠捅

出0入0汤圆

发表于 2014-5-16 11:38:32 | 显示全部楼层
感觉现在中级会员ID也太容易刷了。。。我看着自己的等级,有一种深深的自卑感。。。。

出0入0汤圆

发表于 2014-5-16 11:42:38 | 显示全部楼层
顶楼上的..感同身受...

出0入42汤圆

发表于 2014-5-16 11:43:06 | 显示全部楼层
jiaowoxiaolu 发表于 2014-5-16 11:36
都混到这种等级的ID竟然还能问这种问题,菊花欠捅

我这个灌水数量才算等级

出0入131汤圆

发表于 2014-5-16 11:43:57 | 显示全部楼层
看看等级

出0入0汤圆

发表于 2014-5-16 11:50:26 | 显示全部楼层
其实我没弄明白楼主的问题

出20入186汤圆

发表于 2014-5-16 12:01:48 | 显示全部楼层
楼主可能j一个数据,在格式化显示时,需要转换成10进制显示在屏幕上,
简单啊,除10,取余数,再除100,取余数,等,,,,,,

出0入10汤圆

发表于 2014-5-16 12:20:43 | 显示全部楼层
LZ问题没描述明白还是怎么的啊?

出0入0汤圆

发表于 2014-5-16 12:26:05 来自手机 | 显示全部楼层
楼主大概是想说压缩bcd码的运算吧。内嵌汇编就好了,这样最快。

出0入0汤圆

发表于 2014-5-16 12:43:20 | 显示全部楼层
表示看不懂楼主在说什么

出0入0汤圆

发表于 2014-5-16 12:51:38 来自手机 | 显示全部楼层
楼主能不能详细描述下问题呢,不明白楼主在说什么

出0入0汤圆

发表于 2014-5-16 13:09:31 | 显示全部楼层
看到标题,很惊讶,以为自己的知识储备有漏洞,本来还想进来学习学习的。

出0入0汤圆

发表于 2014-5-16 21:18:01 来自手机 | 显示全部楼层
估计他想问bcd码运算

出0入0汤圆

发表于 2014-5-16 22:34:13 | 显示全部楼层
从来没想过这样的问题呢

出0入0汤圆

 楼主| 发表于 2014-6-1 14:08:35 | 显示全部楼层
我去,一段时间木有来,原来有这么多回复啊

出0入0汤圆

 楼主| 发表于 2014-6-1 14:19:17 | 显示全部楼层
haihuawu 发表于 2014-5-16 12:26
楼主大概是想说压缩bcd码的运算吧。内嵌汇编就好了,这样最快。

是的!朋友

出0入0汤圆

 楼主| 发表于 2014-6-1 14:22:46 | 显示全部楼层
本帖最后由 zhuyi 于 2014-6-1 14:39 编辑

楼上有轻易下结论的朋友,看清我的要求!
精度高!且效率高
不要说什么做除法,除10之类的,首先不说各种类型表示的数据精度,就说取一个数字要做一次除法,这个合理吗?
我要的是类似51中DAA指令效果,硬件支持10进制运算的。
最后一个精度问题,FLOAT型的好像只有7个半数字的精度,DOUBLE型的倒是精度够了,但效率就更不用说了,要是做过计算器的朋友就知道了! 最开始android出来的时候,自带的计算器都有精度问题的BUG!

最后关于进制的说明,这点可能是我没说清楚, 类似BCD码的10进制吧!
题外话,我现在工作中做的部分项目,客户对与1uA的电流与1个byte的ROM也会斤斤计较! 当然这样的项目大部分都是汇编来做, CPU一般跑几十KHZ ~ 几百KHZ几MHZ。

出0入0汤圆

 楼主| 发表于 2014-6-1 14:33:26 | 显示全部楼层
举个四舍五入的我目前已只的最高效率的运算:
signed long round1(float floatvalue_to_round)
{
          float       floattmp ;
          unsigned long    rounded_value ;
          floattmp      = (unsigned long) 0x00FD8000L + (floatvalue_to_round);  
          rounded_value = *(unsigned long*)(&floattmp) - (unsigned long)0x4B7D8000L;  
          if ( rounded_value != (unsigned long) rounded_value )
            rounded_value = ( rounded_value >> 31 ) ^ 0x7FFF;
          return rounded_value;  
}

我想了解的是关于BCD码的10进制运算,有否类似方法?

出0入0汤圆

 楼主| 发表于 2014-6-1 14:50:31 | 显示全部楼层
yuyu87 发表于 2014-5-16 12:01
楼主可能j一个数据,在格式化显示时,需要转换成10进制显示在屏幕上,
简单啊,除10,取余数,再除100,取 ...


差不多是这意思! 这类程序,要说代码实现起来最简单的还是sprintf, 但这个比较吃资源,效率我没去测试,不过估计肯定也不高

出0入0汤圆

 楼主| 发表于 2014-6-1 14:52:42 | 显示全部楼层
jiaowoxiaolu 发表于 2014-5-16 11:36
都混到这种等级的ID竟然还能问这种问题,菊花欠捅

有疑惑问问怎么啦? 你如果痒,我不介意帮帮忙的

出0入0汤圆

 楼主| 发表于 2014-6-1 14:55:44 | 显示全部楼层
alcohol 发表于 2014-5-16 11:29
大虾,世界只有一种进制,叫做二进制,哪有什么4进制8进制10进制?

老师说e进制最好,只不过目前技术问题实现不了吧

出0入0汤圆

 楼主| 发表于 2014-6-1 14:59:25 | 显示全部楼层
本帖最后由 zhuyi 于 2014-6-1 15:00 编辑
r166 发表于 2014-5-16 11:03
仔细说说,c怎么不支持10进制了。


自然支持bcd码,不需要我们编写程序去解析BCD码,因为我知道的几种高级语言没有这种功能,所以想看看大家有没有高效的方法来实现这种BCD码,个人想法是打包成一个10进制类或是一个高效的用汇编实现的16进制-BCD码转换程序

出0入0汤圆

 楼主| 发表于 2014-6-1 15:10:20 | 显示全部楼层
albert_w 发表于 2014-5-16 11:43
我这个灌水数量才算等级

牛B!

出0入0汤圆

 楼主| 发表于 2014-6-1 15:13:38 | 显示全部楼层
albert_w 发表于 2014-5-16 11:32
除了数据文本化以及文本数据化的时候, 我实在不知道讲进制到底在说什么

从朋友字里行家可看出,你的开发平台资源应该都不用担心的,估计都是高端MCU或是CPU开发,不过我这大部分都是在低端MCU上应用的,要考虑效率问题,而且有些编译器还不支持DOUBLE型数据,你就是想低效也还没办法呢

出0入42汤圆

发表于 2014-6-1 23:47:17 | 显示全部楼层
zhuyi 发表于 2014-6-1 15:13
从朋友字里行家可看出,你的开发平台资源应该都不用担心的,估计都是高端MCU或是CPU开发,不过我这大部分 ...

嗯, 你这个场景确实比较特殊. 我们之前大意了

出0入4汤圆

发表于 2014-6-2 00:34:39 | 显示全部楼层
楼主别喷,自己也未说清楚。我觉得所有的都得转换成二进制这个是必须的吧,至于是定点或是浮点看精度要求了。C语言好像绕不开这个吧,内嵌汇编就不好讲了,好多单片机都没有十进制运算还带有溢出或借位标志位,一般是二进制标志位,愿闻其详

出0入0汤圆

发表于 2014-6-2 08:20:58 来自手机 | 显示全部楼层
c语言不是给特定平台设计的,不能保证最终执行的平台硬件直接支持bcd,而且这个需求并不是通用需求,应用不会特别频繁,语言加上这个语法糖只会变得更臃肿,别的语言自然也不会加入这个功能。你完全可以内嵌汇编解决,对于整数精度,网上也一大堆开源的任意精度实现。别的语言比如lisp,schema还提供分数类型来提高有理数精度,这个在c里也可以通过库来实现

出0入0汤圆

 楼主| 发表于 2014-6-2 09:40:53 | 显示全部楼层
lexchou 发表于 2014-6-2 08:20
c语言不是给特定平台设计的,不能保证最终执行的平台硬件直接支持bcd,而且这个需求并不是通用需求,应用不 ...

就是说没什么好方法咯,只能老老实实的做除法或是干脆用自己写的汇编。 对了,你说的库函数是指?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-31 05:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表