diameter 发表于 2012-8-26 19:00:04

[SH]如何在9860SDK中使用64位无符号整数?

如题,移植Eigenmath遇到的问题。
我在sh的官方文档只见到处理64位乘法的一个函数
long dmuls_h(long data1,long data2)
带符号的 32 位 x 带符号的 32
位执行带符号 64 数据的乘法,
并返回一个高 32 位的结果

long dmuls_l(long data1,long data2)
带符号的 32 位 x 带符号的 32
位执行带符号 64 数据的乘法,
并返回一个低 32 位的结果

蛋疼了,long long和__int64都用不成了..

diameter 发表于 2012-8-26 19:21:53

另外我吐槽一下eigenmath作者的不良习惯:因为是使用c++,允许不同函数拥有同一个函数名(编译时时根据参数表来判断,说不定会生成一些什么_func_int_int或者_func_void...)
我打算全改成c的,一遍没看完吐了...prototypes.h就18.8KB....尤其是一个叫decomp的函数,同一个名字有两个实现(decomp_void,decomp_int)...最后我还是放弃了,用c++吧..

diameter 发表于 2012-8-26 19:57:18

另外附上维基百科里面关于CAS的对比,包括了几乎所有已知的CAS
http://en.wikipedia.org/wiki/List_of_computer_algebra_systems
CASIO的Classpad Manager和CASSIOPEIA(CASIO-MAPLE )
以及ti买来的Derive,TI-Nspire CAS (Computer Software)都在列

jinzihao1996 发表于 2012-8-26 21:12:42

支持一下,希望能成功移植,fx-9860就会有一个真正可靠的CAS了。

朔雪X忆 发表于 2012-8-26 21:57:08

本帖最后由 朔雪X忆 于 2012-8-27 08:51 编辑

解决方法是……改用GCC??
见此:
http://www.cemetech.net/forum/viewtopic.php?t=8025&start=20
-更新

不对……文中所述的是PRIZM GCC吧……

-再更新
在Cemetech问了一下,原帖在
http://www.cemetech.net/forum/viewtopic.php?t=8112
……其实可以用long long?

wtof1996 发表于 2012-8-27 12:25:39

c++函数重载很蛋疼……
不过我看编译器手册那个sh是可以编译c++的呀
另外64位的话自己考虑用位段能不能实现吧……

diameter 发表于 2012-8-27 21:10:01

5# 朔雪X忆

实测用不了longlong

diameter 发表于 2012-8-27 21:43:52

好吧我手贱,我把long long全部换成long了
结果...crash了..

问题应该就是出在这个高精度运算上
没改之前精度高的吓人的..

Nero 发表于 2012-9-4 21:18:17

按那个论坛里面所说,用两个long的结构实现long long不知道是否可能
页: [1]
查看完整版本: [SH]如何在9860SDK中使用64位无符号整数?