[风之影][经验]有效小数位数
本帖最后由 cabinsummer 于 2011-12-11 11:39 编辑最近有新手咨询如何得到小数位数。
其实这个问题必须考虑计算机数据的存储方式。在默认的方式下,double数据(LISP里叫real)只能有16位有效小数,LISP会将超出16位的部分截断,LISP的+-×÷也是基于这个来的。在内存中,double精度就是16位。参见http://zhidao.baidu.com/question/11599532.html。其它语言的小数能保存多少位,视情况而定。
我的圆周率大挑战可以计算到上万位,但绝对不是以一般的方式存储的,而是以表的方式存储,此时,它的运算完全不能用简单的+-×÷,必须重新定义。当然,你也可以自己来一套新玩法,这个能否通用就不是由你说了算的。
在默认的情况下,求得小数有效位数可以用以下方法
(setvar "DIMZIN" 8)
(- (strlen (rtos (- x (fix x)) 2 16)) 2)
另外,字符串也不是无限的,最多4096个字符。
整数范围-2147483648——2147483647。
本帖最后由 cabinsummer 于 2011-12-11 21:48 编辑
我在圆周率计算时用strcat,加到4096个字符时就出错了,见大挑战第一季 谈经验,很难得。。。。 cabinsummer 发表于 2011-12-11 21:46 static/image/common/back.gif
我在圆周率计算时用strcat,加到4096个字符时就出错了,见大挑战第一季
见我的帖子,肯定不是4096
http://bbs.mjtd.com/thread-95140-1-1.html
我测试时100万出错,10万不出错
页:
[1]