吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 1000|回复: 10

搞不明白的 双精度类型

[复制链接]
DavidLiu 发表于 2025-4-2 12:37 | 显示全部楼层 |阅读模式

本站严厉禁止求脱求破行为(包含无自我分析直接求思路),如发现此类求助主题请点击“举报”,让我们共同维护优质的学习环境!


50HB


语言描述可能有点绕,看源码,就3行

运行结果如下:
001.jpg



调试输出的结果如下:
002.jpg


虽然看起来相等,但就是不相等!!!(原谅我只能这么表达)

猜想应该是数据转换出了问题,请各位老师科普一下因果,以及怎么样才能相等呢?
不要改运行逻辑




程序和源码如下:
连接:https://wwqk.lanzouq.com/iPzOl2sfoahc
密码:hz6u




最佳答案

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lies 发表于 2025-4-2 12:37 | 显示全部楼层

最佳答案本应属于楼主私有,因此限制查看

您还有0次查看次数,点此查看答案

点此购买查看次数
也可以兑换VIP特权或加入解密专家,每日可免费查看5次最佳答案!

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lies 发表于 2025-4-2 13:13 | 显示全部楼层

双精度数值通常精确到小数点后 15 到 16 位,你转成文本再转回来就损失了后面的精度,虽然显示看起来是一样,实际上存储器里的值是不一样的
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
学编程的闹钟 发表于 2025-4-2 13:22 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| DavidLiu 发表于 2025-4-2 15:19 | 显示全部楼层

lies 发表于 2025-4-2 13:41
转换成文字数值为:4421601.757813

谢谢大佬指点,牛的牛的,看来不杀到底层,还真不好理解

查了一下,双精度数据宽度是8个字节
还想跟您请教一下有没有什么办法或者思路,能够把这8个字节的宽度里,
使其就等于(a/256)呢,让等号成立
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| DavidLiu 发表于 2025-4-2 15:27 | 显示全部楼层

lies 发表于 2025-4-2 13:13
双精度数值通常精确到小数点后 15 到 16 位,你转成文本再转回来就损失了后面的精度,虽然显示看起来是一样 ...

比如我写了一个密码,就是(a/256),然后我把它转换成文本储存下来,发给用户

用户对这个文本进行解读,还是与(a/256)做比较

相等就是密码正确
不相等就是密码错误
(最近在学一点通信,整数型的好理解,double的传输会出问题,唉)
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lies 发表于 2025-4-2 15:58 | 显示全部楼层

DavidLiu 发表于 2025-4-2 15:27
比如我写了一个密码,就是(a/256),然后我把它转换成文本储存下来,发给用户

用户对这个文本进行解读, ...

你的需求可以用两种方式解决:
1、精度要求不高的话,用户端的程序将双精度数值同样经过“到文本->到数值”的转换再与你发过去的文本比较
2、精度要求高的话,可以指定双精度数值的转换格式,保留小数精度再传给用户,参考:
https://www.jb51.net/article/150206.htm
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| DavidLiu 发表于 2025-4-2 17:53 | 显示全部楼层

lies 发表于 2025-4-2 15:58
你的需求可以用两种方式解决:
1、精度要求不高的话,用户端的程序将双精度数值同样经过“到文本->到数值 ...

好像有点明白了,谢谢大佬指点,我还是先研究研究您提到的方式二。

让右边(a/256)不变的前提下,左边经过文本转换后,还能让等式成立,这样写算法就敢用除法了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| DavidLiu 发表于 2025-4-3 11:43 | 显示全部楼层

lies 发表于 2025-4-2 15:58
你的需求可以用两种方式解决:
1、精度要求不高的话,用户端的程序将双精度数值同样经过“到文本->到数值 ...

大佬我研究了方式二,例子测试下来,它最大还是只能到小数点后5位,就算填入8位,后面也只是用0填充,有没有办法能让小数部分精确到8位?计算器都可以做到,为什么易语言就拉跨了,太难受了

我查到的双精度转为十进制显示,最大有效数字限度是15位(应该是包含整数部分和小数部分)

易语言真的就无解么
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lies 发表于 2025-4-3 17:48 | 显示全部楼层

DavidLiu 发表于 2025-4-3 11:43
大佬我研究了方式二,例子测试下来,它最大还是只能到小数点后5位,就算填入8位,后面也只是用0填充,有 ...

我特地下了个易语言环境测试,发现易语言的数值转换函数是有限制的
像这样的语句:标准输出 (, 数值到格式文本 (4421601.757813, 15, 假))
想要改成:标准输出 (, 数值到格式文本 (4421601.7578125, 15, 假))
是做不到的,改完会恢复成上面的语句
把整数位减少一位,改为:标准输出 (, 数值到格式文本 (421601.7578125, 15, 假))
就成功了。
所以如果想精度高就不能使用易语言的转换函数,自己写转换函数或把双精度转成十六进制吧,易语言不太懂,你可以 AI 问一下。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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