[TL]{算法}如何在不支持float的编译平台上模拟浮点数?

93 views
Skip to first unread message

Lucas Zhang

unread,
Jun 12, 2011, 3:13:57 AM6/12/11
to pon...@googlegroups.com
       最近在把android上的一个应用移植到MTK上去的过程中遇到一个问题,MTK不支持浮点数,而且CPU只有200M HZ,运算能力很差。于是我需要找到一种模拟浮点数的方法。如果用整数来模拟的话,有什么好的办法在不丢失太多精度的情况下保持效率呢?如果自己基于字符串实现一个浮点数类的话,效率会不会不够高呢?有同学知道有什么库可以解决这种问题吗?谢谢~

--
Zhang Qing (张卿)

机械唯物主义 : linjunhalida

unread,
Jun 12, 2011, 3:15:44 AM6/12/11
to pon...@googlegroups.com
好像有专门的库来做这样的事情?

2011/6/12 Lucas Zhang <zhangq...@gmail.com>:

Lucas Zhang

unread,
Jun 12, 2011, 4:28:52 AM6/12/11
to pon...@googlegroups.com
我也觉得应该有专门的库,j2me上有个库mathFP可以做这件事,但是C平台上没有google到特别有用的信息

2011/6/12 机械唯物主义 : linjunhalida <linjun...@gmail.com>



--
Zhang Qing (张卿)
@SJTU ShangHai

颜国雄

unread,
Jun 12, 2011, 3:26:33 AM6/12/11
to pon...@googlegroups.com
好奇~一般有浮点数定点化,感觉 用字符串的肯定不行的,原来的一个算术运算,现在要用一段程序模拟,速度太慢了。mark~

Kaspter Ju

unread,
Jun 12, 2011, 5:28:45 AM6/12/11
to pon...@googlegroups.com
2011/6/12 Lucas Zhang <zhangq...@gmail.com>:
> 我也觉得应该有专门的库,j2me上有个库mathFP可以做这件事,但是C平台上没有google到特别有用的信息
>

看看这个
http://www.jhauser.us/arithmetic/SoftFloat.html

--
Kaspter Ju

Lucas Zhang

unread,
Jun 12, 2011, 6:49:33 AM6/12/11
to pon...@googlegroups.com
thx! 明天好好研究一下~

2011/6/12 Kaspter Ju <nigh0...@gmail.com>

thomas92911

unread,
Jun 12, 2011, 9:25:08 AM6/12/11
to pon...@googlegroups.com
我记得opengl es代码里有一部分专门用整数模拟浮点的,还优化过。

Milo Yip

unread,
Jun 12, 2011, 10:02:57 AM6/12/11
to pon...@googlegroups.com

qiaojie

unread,
Jun 12, 2011, 11:47:31 AM6/12/11
to pon...@googlegroups.com
优先考虑使用定点数,这比模拟浮点数要快的多。


2011/6/12 Lucas Zhang <zhangq...@gmail.com>

yunfan

unread,
Jun 12, 2011, 12:23:50 PM6/12/11
to pon...@googlegroups.com
On Sun, Jun 12, 2011 at 11:47:31PM +0800, qiaojie wrote:
> 优先考虑使用定点数,这比模拟浮点数要快的多。
>
>
> 2011/6/12 Lucas Zhang <zhangq...@gmail.com>

早期就有好多人写过浮点运算软实现,可以找早期代码来看

另外我记得讲汇编的书有提浮点运算的实现 不是字符串方式的

Lucas Zhang

unread,
Jun 12, 2011, 12:57:47 PM6/12/11
to pon...@googlegroups.com
定点数的话就是直接浮点数乘以100、1000之后变成整数算咯?

2011/6/12 qiaojie <qia...@gmail.com>

HaoPeiQiang

unread,
Jun 12, 2011, 1:09:05 PM6/12/11
to pon...@googlegroups.com
当然不是,当然你做财务计算的时候可以,因为有效数字是2位,或者三位。

你到底做啥东西啊,你也没说过啊,求助要靠谱。要是算工资之类的,确实不需要浮点数,*100足以了。

2011/6/13 Lucas Zhang <zhangq...@gmail.com>:

--
Tinyfool的Blog http://tiny4.org/blog/
Tiny4Cocoa http://tiny4.org/cocoa/
myTwitter: http://twitter.com/tinyfool

Lucas Zhang

unread,
Jun 12, 2011, 1:26:35 PM6/12/11
to pon...@googlegroups.com
做的东西里面有一些几何运算,需要算距离、斜率、比例之类的计算,现在的代码里面有加减乘除乘方开方求对数...

2011/6/13 HaoPeiQiang <HaoPe...@gmail.com>

li yang

unread,
Jun 12, 2011, 9:40:35 PM6/12/11
to pon...@googlegroups.com
其实只要看看计算机体系结构里面浮点数的运算方式,
实现软浮点数很简单啊。

2011/6/13 Lucas Zhang <zhangq...@gmail.com>:

Error.right

unread,
Jun 12, 2011, 9:47:38 PM6/12/11
to pon...@googlegroups.com
看虚拟机的实现

Lucas Zhang <zhangq...@gmail.com>编写:

>thx! 明天好好研究一下~
>
>2011/6/12 Kaspter Ju <nigh0...@gmail.com>
>
>> 2011/6/12 Lucas Zhang <zhangq...@gmail.com>:
>> > 我也觉得应该有专门的库,j2me上有个库mathFP可以做这件事,但是C平台上没有google到特别有用的信息
>> >
>>
>> 看看这个
>> http://www.jhauser.us/arithmetic/SoftFloat.html
>>
>>
>>
>> --
>> Kaspter Ju
>>
>
>
>

rockeet

unread,
Jun 12, 2011, 10:20:36 PM6/12/11
to TopLanguage
mpfr
The MPFR library is a C library for multiple-precision floating-point
computations with correct rounding.

GCC 就是用的 mpfr

On Jun 12, 3:13 pm, Lucas Zhang <zhangqing1...@gmail.com> wrote:
> 最近在把android上的一个应用移植到MTK上去的过程中遇到一个问题,MTK不支持浮点数,而且CPU只有200M

> HZ,运算能力很差。于是我需要找到一种模拟浮点数的方法。如果用整数来模拟的话,有什么好的办法在不丢失太多精度的情况下保持效率呢?如果自己基于字符串实现 一个浮点数类的话,效率会不会不够高呢?有同学知道有什么库可以解决这种问题吗?谢谢~
>
> --
> Zhang Qing (张卿)

Lucas Zhang

unread,
Jun 12, 2011, 10:32:22 PM6/12/11
to pon...@googlegroups.com
MTK本身也实现了软浮点数,但是速度巨慢... 我自己实现的会比它快么?

2011/6/13 li yang <liya...@gmail.com>

daxia.tang

unread,
Jun 14, 2011, 8:53:04 AM6/14/11
to TopLanguage
首先就是你对数字精度要求有多少,表达的数字范围多少?
1.可以定点化,只要在数字范围之内达到符合要求的误差期望,方差,可以直接定点化。
2.没法定点化,再考虑软浮点吧,这个效率比较低,又要计算指数,又要计算有效位,还要对阶,还要一系列访存操作。
3.用字符串实现浮点数就没有必要了,不会这么做的,一般情况下软浮点库的性能都达不到你的要求,自己弄也不会强多少的。

Lucas Zhang

unread,
Jun 14, 2011, 10:39:12 AM6/14/11
to pon...@googlegroups.com
保留3位小数应该就可以了,所以定点化应该就可以了~
谢谢!

2011/6/14 daxia.tang <daxia...@gmail.com>

red...@gmail.com

unread,
Jun 14, 2011, 10:50:19 AM6/14/11
to pon...@googlegroups.com
google 一下, 第一位就看到这个, MTK 如果用的是 gcc 的话, 应该是现成的了, 不知道是不是呢 ?

http://gcc.gnu.org/onlinedocs/gccint/Soft-float-library-routines.html


于 2011/6/14 22:39, Lucas Zhang 写道:
保留3位小数应该就可以了,所以定点化应该就可以了~
谢谢!

2011/6/14 daxia.tang <daxia...@gmail.com>
首先就是你对数字精度要求有多少,表达的数字范围多少?
1.可以定点化,只要在数字范围之内达到符合要求的误差期望,方差,可以直接定点化。
2.没法定点化,再考虑软浮点吧,这个效率比较低,又要计算指数,又要计算有效位,还要对阶,还要一系列访存操作。
3.用字符串实现浮点数就没有必要了,不会这么做的,一般情况下软浮点库的性能都达不到你的要求,自己弄也不会强多少的。

On 6月12日, 下午3时13分, Lucas Zhang <zhangqing1...@gmail.com> wrote:
>        最近在把android上的一个应用移植到MTK上去的过程中遇到一个问题,MTK不支持浮点数,而且CPU只有200M
> HZ,运算能力很差。于是我需要找到一种模拟浮点数的方法。如果用整数来模拟的话,有什么好的办法在不丢失太多精度的情况下保持效率呢?如果自己基于字符 串实现一个浮点数类的话,效率会不会不够高呢?有同学知道有什么库可以解决这种问题吗?谢谢~
>
> --
> Zhang Qing (张卿)

Lucas Zhang

unread,
Jun 14, 2011, 10:21:00 PM6/14/11
to pon...@googlegroups.com
这个是软浮点吧

2011/6/14 <red...@gmail.com>

张国锋

unread,
Jul 6, 2011, 10:25:58 AM7/6/11
to pon...@googlegroups.com
这个应该很多吧,早期在Turbo C, Turbo Pascal都有,话说那时候大部分PC机都不带浮点处理器。几乎所有C编译器都有软浮点库。
Reply all
Reply to author
Forward
0 new messages