网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月21日漏签0天
fx-es(ms)吧 关注:14,617贴子:274,504
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 首页 上一页 1 2 3 下一页 尾页
  • 65回复贴,共3页
  • ,跳到 页  
<<返回fx-es(ms)吧
>0< 加载中...

回复:【技术】内部数值存储研究

  • 只看楼主
  • 收藏

  • 回复
  • lolo_often
  • TI-84+
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
后排留名


  • 突发规划
  • TI-84+CE
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
居然精了?!


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
自然语言的解释还没有码好,预计明天发。


在《求问关于M的事情》一贴中 @lhy7715 提到可否用 C 语言来描述一下,下面放代码:


struct storage_area {
unsigned long long int padding; /* off+0xC0 */
unsigned /* little_endian */ short int rand_seed; /* off+0xC8 */
struct value_var M, Ans, A, B, C, D, E, F, X, Y; /* off+0xCA */
};


struct value_var {
unsigned char data[8]; /* BCD code, magnitude */
unsigned char exp; /* BCD code, two's complement */
unsigned char sign;
}


#define odd(x) ((x) & 0x1)
#define bcd2int(bcd) ((((bcd) >> 4) & 0xf)*10+((bcd) & 0xf))


#define get_value_var_type(x) ((x).data[0] >> 4)
#define get_value_var_digit(x, digit_no) ((x).data[(digit_no)/2] >> (odd((digit_no)) ? 0 : 4) & 0xF) /* 1 <= digit_no <= 15 */


/* Values for value_var.sign */
#define VALUE_VAR_SIGN_POS_NEG 0x0 /* 0 <= x < 1 */
#define VALUE_VAR_SIGN_POS_POS 0x1 /* x > 1 */
#define VALUE_VAR_SIGN_NEG_NEG 0x5 /* -1 < x < 0 */
#define VALUE_VAR_SIGN_NEG_POS 0x6 /* x <= -1 */


看不懂的等我的自然语言详解。


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
五、浮点格式


十个字节,如下定义:


字节1,高4位:变量类型域,应为 0x0。
字节1,低4位:第一位十进制有效数字。
字节2,高4位:第二位十进制有效数字。
字节2,低4位:第三位十进制有效数字。
……
字节8,低4位:第十五位十进制有效数字。
字节9:指数,用BCD解码,负数用反码,稍后解释。
字节10:符号位:
0x00:0≤X<1
0x01:X≥1
0x05:-1<X<0
0x06:X≤-1


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
下面我来举例子:


令 M=5.42694682881413×10^81
内存为 05 42 69 46 82 88 14 13 81 01


令 M=4.55070183730897×10^-32
内存为 04 55 07 01 83 73 08 97 68 00 (注意 68=100-32,正所谓反码表示负数)


令 M=-7.65120911691×10^57
内存为 07 65 12 09 11 69 10 00 57 06 (注意末位补零)


令 M=-7.46426841128546×10^-18
内存为 07 46 42 68 41 12 85 46 82 05


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
六、浮点的度秒分表示


相当于输入对应的数值再按下度分秒按钮的效果。
如 41 50 00 00 00 00 00 00 00 01 表示 1度30分0秒
这里就不再赘述了


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
八、矩阵或向量的指针


第一个字节决定了指向的目标。剩下9个字节未发现用处。
0x60 代表 MatA/VctA
0x61 代表 MatB/VctB
0x62 代表 MatC
0x63 代表 MatAns/VctAns


这也是为什么前人在异常模式下在 M Ans A B C D E F X Y 中存储矩阵或者向量。


光有这个变量没有用,还需要对应的矩阵有定义。方法是进入 MATRIX 模式或 VECTOR 模式,用 Dim 菜单定义某矩阵。或者做矩阵运算,使矩阵存储到 MatAns 中。


MatA/VctA MatB/VctB MatC 三个矩阵会在退出 MATRIX 模式或 VECTOR 模式的时候清空,所以为了不让其清空可以采取特殊的方法来切换模式。这里给大家留思考题,需要5次按键。


关于利用这种类型的变量,可以参考楼主的《【991+】不进乱点模式爆矩阵!》一贴。


  • AOU_CHEN
  • JP900
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
⑨、根式


先修正一下5L的内容。根式的内部表示方法其实是 ±a/b*√(c)±d/e*√(f)。
其中 0≤(a,b,d,e)≤99 0≤(c,f)≤999。
也就是说两项可以用不同的分母,显示的时候会自动通分。


十个字节如下分布:
8f ff dd ee 0c cc aa bb rr ss
8 是变量类型域。
0 是未用的一个域,通常情况下为 0,目前发现人为写入任何值不影响结果。
其中 aa bb ccc dd ee fff 分别代表 BCD 编码后的 a b c d e f 值。
rr 代表 ±a/b*√(c) 的符号位,ss 代表 ±d/e*√(f) 的符号位。依然是 0x01 或者 0x05。
并且一般情况下计算器储存是会让 c≤f。但是显示的时候会让较大的根式在左边。


比如当计算器显示成 (√(6)-√(2))/4 时,内部的储存是:
80 02 01 04 00 06 01 04 01 05


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
十、特殊值 ERROR


就像计算机浮点数有三个特殊值 Infinity -Infinity NaN 一样,fx-ES PLUS 系列计算器有一个特殊值,那就是 ERROR。
第一个字节取 0xF3,其他字节没有用处。


自然状态下 ERROR 可以用如下方法得到:


方法一:TABLE 法。
进入 TABLE 模式,输入函数式 f(X)=0,Start 输入 0,Stop 输入 9.99999999999999×10^99,Step 输入 5×10^99。输出的表格第二行显示 X。此时变量 X 值为 ERROR。


方法二:积分法。(参见楼主的《【991+】积分法溢出ERROR,不用再TABLE了!》一贴)
在 COMP 模式输入 M=∫(1,M,9.99999999999999×10^99),然后按 CALC,输入初值 M=0。


ERROR 值可以用来触发 CMPLX 溢出模式。


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
订正28L的句子:
并且一般情况下计算器储存是会让 c≤f。但是显示的时候会让较大的根式在左边。


改成:
并且一般情况下计算器储存是会让 f≤c。但是显示的时候会让较大的根式在左边。


  • HEAVEN4499
  • TI-84+CE
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主威武荡漾


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
十一、如何利用变量值辅助拼字(魔数法)


这里就举楼主自己的例子吧:《【991+】【新手向】一步步教你打 I love you》的9L中使用了这两个变量:
M=1.4920313076652×10^79
Ans=1.7521202020202×10^-69


下面来转换成内部的存储结构:
M 为 01 49 20 31 30 76 65 20 79 01
Ans 为 01 75 21 20 20 20 20 20 31 00


转换成字符串为:"\x01I 10ve y\x01\x01u! 1"
也就是说我们利用这两个数值产生了13个目标字符。这13个目标字符中有10个字符是键盘上没有对应按键的字符。
也就是说使用辅助变量值可以减少刷不稳定字符的数量。


那么一共有 M Ans A B C D E F X Y 十个变量,每一个变量都可以辅助拼字。总共可用字节有 80 字节,完全可以满足四行拼字的 64 字节的需要。


其实在基本溢出模式下是无法访问到 D 后面的变量区域的(最多只能到达偏移量 +0xFF 的地方),但是可以通过删除来使后面的内容移动到前面。但是字符串复制是遇到 0x00 就会停止,所以要保证存储的每一个变量大于等于 1 或小于 0,并且填满所有有效数字。


但是魔数法也有弊端,那就是只能表示 99 个字符,涵盖 34 个大小写字母,10 个阿拉伯数字,空格(0x20)、感叹号(0x21)这两个常用标点。所以魔数法只能够起到辅助作用,不能代替刷不稳定字符。


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在实际的拼字过程中,会经常使用空格作为填充字符,经常发现空格的使用频率比任何其他字符都高。而空格通过魔数法产生很有效率。如上述的 I love you! 中有七个空格。如果通过刷不稳定字符的方法得到这七个空格是很吃力的。


  • masmyc
  • 9860GIII
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
十二、EOF


^D


登录百度帐号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 首页 上一页 1 2 3 下一页 尾页
  • 65回复贴,共3页
  • ,跳到 页  
<<返回fx-es(ms)吧
分享到:
©2023 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示