明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3166|回复: 5

[风之影][经验]有效小数位数

[复制链接]
发表于 2011-12-11 10:37:51 | 显示全部楼层 |阅读模式
本帖最后由 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。

点评

字符串长度限制跟运行软件平台有关!cad可不止4096个字符!试试如下代码: (setq a "") (repeat 1000000 (setq a (strcat a "A"))) ,看看(strlen a)返回值是多少!要有点耐心,循环运行1百万次呢!   发表于 2011-12-11 21:21
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2011-12-11 21:46:43 | 显示全部楼层
本帖最后由 cabinsummer 于 2011-12-11 21:48 编辑

我在圆周率计算时用strcat,加到4096个字符时就出错了,见大挑战第一季
发表于 2011-12-13 18:26:13 | 显示全部楼层
谈经验,很难得。。。。
发表于 2011-12-14 00:43:25 | 显示全部楼层
发表于 2011-12-14 14:04:03 | 显示全部楼层
发表于 2012-8-30 18:01:51 | 显示全部楼层
cabinsummer 发表于 2011-12-11 21:46
我在圆周率计算时用strcat,加到4096个字符时就出错了,见大挑战第一季

见我的帖子,肯定不是4096
http://bbs.mjtd.com/thread-95140-1-1.html
我测试时100万出错,10万不出错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 07:05 , Processed in 0.191772 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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