GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 4397|回复: 92
收起左侧

[技术交流] 一滴"血液"引发的"血案",是谁减掉了那一滴"血液"

    [复制链接] |关注本帖

净化污秽的天照元气菠菜人神奇四叶草守卫: 不可选中驯化黑龙幼崽幽浮起司煲月影狼落雪勇者与龙的传说-第一页

    瓦尼 发表于 2024-3-22 20:05:09 | 显示全部楼层 |阅读模式 <
    本帖最后由 GMagels 于 2024-4-1 21:49 编辑

    血液祭献换取属性值的时候采取的是向下取整,因此可以通过每次只换取一点属性来保证交的税最小化。前几天楼主发了一篇日志,计算了一下泥潭手动祭献的情况下怎么样选择属性值的数量来少交税。

    在日志中,使用了Excel拉表,根据每个属性值的初始价格,以及税率值15%,计算了不同数量下每点属性值的平均价格,并在最后给出了这样子的结论:
    总结来说,最划算的方式肯定还是每次只兑换1点,除此之外的第二选择旅程和知识是3点,咒术是2点。

    如果只是要避免交最多的税的情况的话,只要注意不要兑换偶数数量的旅程和知识以及4的倍数个咒术就OK了。

    灵魂的税是整数,不存在避税方式,所以请随意兑换XD

    坛友是万能的,在发布日志当天,收到了这样的评论:
    但是一次性兑换3个灵魂只要3449血液,超值折扣,赶快去兑换吧()

    看到这条回复的楼主愣了一下,啊!?这不对吧,怎么会少一滴?1000点血液*15.00%的税率应当缴纳150滴血液税,向下取整也还是150滴血液啊,怎么辉石呢?


    由于楼主在计算的时候只是使用Excel对数字进行计算,并没有真的去页面一个一个数字去试,秉承着“实践是检验真理的唯一标准”,马上就去祭献页面进行了测试.......


    结果...真的是3449....是我血液不够换灵魂的错.....该不会....该不会换三个灵魂真的有特殊折扣吧.....

    虽然可能永远不会血液换灵魂,但是这个东西就像是谜底还没有揭开的你画我猜,一直搞的人心痒痒的。

    于是楼主决定去翻代码,来看看到底是不是折扣。很快便翻到了这句向下取整数量的计算语句:
    1. $('exchangedesamount').value = Math.floor( tocredit.getAttribute('ratio') / fromcredit.getAttribute('ratio') * $('exchangeamount').value * (1 + 0.15));
    复制代码
    仔细研究研究,
    Math.floor

    Math.floor() 是用于向下取整的函数,没什么问题。
    tocredit.getAttribute('ratio') / fromcredit.getAttribute('ratio')

    两个属性的比例值这一点也没问题,1000/1 = 1000。
    $('exchangeamount').value * (1 + 0.15))

    最后这个是输入的数量乘上1.15,看着也没有任何问题。
    这就奇怪了,这个结果的计算过程就应该是1000*N*1.15啊,怎么会出现3449这个数字。

    就在这一筹莫展之际,气急败坏的楼主使用了搜索引擎Bing,计算了3000*1.15,然后居然发现:


    没错,搜索引擎居然也给出了3449的答案!(是真的,大家可以自己去试)至此,这场未定的悬案出现了一丝破解谜题的关键线索。

    顺着这条线索楼主又进行了一番搜索,终于找到了减掉这一滴血液的小黑的身份,他就是.....

    BGM:bilibili
    ⬆CODE区不支持内嵌视频或音乐,请打开这个网站来播放BGM,唉嘿!

    没错小黑就是.......JavaScript!
    JS:证据呢,证据!你凭什么说是我扣掉的那一滴血液。

    确实,指证犯人需要确凿的证据,但是今天想要获取证据并不难,楼主悄悄写了几行JS代码并运行,结果如下:

    没错!当乘数为3000,6000,7000,也就是灵魂数为3,6,7时,得出来的结果会比应该的结果少一丢丢,然后再通过向下取整发的方式,就能完美实现少扣一滴血液!

    JS:那作案动机呢?都花3500血液换灵魂了,我为什么还要去减一滴血液?

    经过楼主缜密的调查,JS里的数字是采用 IEEE 754 标准的 64 位双精度浮点数(百度百科链接)。

    JS存储的数字一共由64个0或1组成,这其中,第0位表示"正负"(蓝色),第1-11位存储"指数"(绿色),第12-63位存储"有效数字"(红色)。

    存储有效数字部分的位数是52位,而很不幸,浮点数(带小数的数)的二进制是无限循环的,比方说这次出场的1.15经过二进制转换是:
    1.0010011001100110011001100110011001100110011001100110011......(无限循环)

    在JS存储时,这个无限循环的数只被记了前52位,后面的都被抹掉了。
    正是因为无限循环的数在存储时被抹掉后续的一部分,1.15在这一步中损失了它精度,造成了后续计算在与3000,6000,7000相乘时得出来的数字与本应得出来的结果差了1。

    对此非常感兴趣的也友友可以去这篇知乎专栏了解详细的原因:JavaScript 浮点数运算的精度问题

    终于,一切水落石出,案结。

    第一次在CODE区发帖,如果有误欢迎指正!如果觉得有意思,也欢迎给个免费的追随。

    有代码基础的友友,可以自己运行一下下面这段代码(会弹窗),亲自看一下JS实际运算的结果。
    <script type="text/javascript">
        window.alert("1000*1*(1+0.15) = "+ 1000*1*(1+0.15) +" \n" +
                     "1000*2*(1+0.15) = "+ 1000*2*(1+0.15) +" \n" +
                     "1000*3*(1+0.15) = "+ 1000*3*(1+0.15) +" \n" +
                     "1000*4*(1+0.15) = "+ 1000*4*(1+0.15) +" \n" +
                     "1000*5*(1+0.15) = "+ 1000*5*(1+0.15) +" \n" +
                     "1000*6*(1+0.15) = "+ 1000*6*(1+0.15) +" \n" +
                     "1000*7*(1+0.15) = "+ 1000*7*(1+0.15) +" \n" +
                     "1000*8*(1+0.15) = "+ 1000*8*(1+0.15) +" \n" +
                     "1000*9*(1+0.15) = "+ 1000*9*(1+0.15) +" \n" );
    </script>
    ↑点击第一个按钮即可直接运行(再次提醒:会弹窗XD)

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    评分

    参与人数 22旅程 +1 金币 +10 血液 +51 追随 +18 堕落 +6 收起 理由
    457 + 1
    Aphrodisy + 1
    Nittbone + 1 + 10 + 6 + 1 勇于探索
    白冥 + 1 很给力!
    raccooncop + 3 + 1 + 1 很给力!
    无心gal游戏 + 3
    叶狻猊 + 3 + 1 + 1
    一只随行 + 2 + 1 很给力!
    书の妖怪 + 3 + 1 很给力!
    you9632587 + 1

    查看全部评分

    回复

    使用道具 举报

    胡子贴纸裸体克里斯虚空之海的鲸黄粱一梦【新春限定】果体 隆新神的赐福都市:天际线2永远的克叔業火死鬥实现梦想

      娱乐法师火布偶 发表于 2024-3-22 20:09:35 | 显示全部楼层 <
      回复

      举报

      胡子贴纸冒险用指南针破损的旧书人鱼之泪雪王的心脏苏格兰圆脸胖鸡[Pro Max]丛林的鸟飞走了不曾寄出的信件幽灵竹筒『随时随地开启!』

        凯诺斯 发表于 2024-3-22 20:14:01 | 显示全部楼层 <
        回复

        举报

        胡子贴纸杰夫‧莫罗20x43 隐形➀吃饱金币的Doge小小安全帽金牌矿工冒险用指南针小小舞台阿拉喵?神灯达拉然

          不是卖萌的基佬 发表于 2024-3-22 20:15:53 | 显示全部楼层 <
          回复

          举报

            DELINQUENCY 发表于 2024-3-22 20:20:27 | 显示全部楼层 <
            支持科普咱最开始发现的是换100个灵魂可以“优惠”1血液,最后经提醒得知低至3灵魂就可以实现了(笑)
            但是为什么偏偏是3,6,7而不是其他的数字呢?感觉还是有点不明白,看看楼主给的参考文献吧
            回复

            举报

              loveffhy 发表于 2024-3-22 20:22:46 | 显示全部楼层 <
              回复

              举报

              胡子贴纸20x43 隐形➀未散的宴席诞星之所

                Riverlethe 发表于 2024-3-22 20:25:37 | 显示全部楼层 <
                回复

                举报

                海盗弯钩眼镜蛇图腾知识大典牧羊人TRPG版塊魔法石碑GM論壇進階勛章

                  皓晨 发表于 2024-3-22 20:25:38 | 显示全部楼层 <
                  回复

                  举报

                  胡子贴纸Futūrum(未来)神秘商店贵宾卡守卫: 坚守眼位璀璨闪蝶魔法不朽·传奇不熄John Reese破碎的圣水瓶『住在GM村』虚空之海的鲸

                    Flamestar 发表于 2024-3-22 20:29:33 | 显示全部楼层 <
                    哇哇哇,牛啊,这科普看完之后还是很惊讶的,有被震惊到,增加了一点点js的小知识,不错哎,这下知道那一滴血为什么没了(但是,3k多血液,这得攒多久)
                    回复

                    举报

                    亚索月影狼晓月终焉旅行骰子!卡利亚权杖

                      黑达克 发表于 2024-3-22 20:33:22 | 显示全部楼层 <
                      新知识get,现在新勋章的升级消耗也越来越高了,不知道下次有没有机会试一下一次换三只灵魂
                      回复

                      举报

                      胡子贴纸肉乖乖实现梦想業火死鬥魔法不朽·传奇不熄十年一梦卡洛斯·奥利维拉官复原职男巫之歌永浴爱河

                        Burry 发表于 2024-3-22 20:36:29 | 显示全部楼层 <
                        回复

                        举报

                        牧羊人森林羊男山猫图腾驯化红龙幼崽腐化龙蛋

                          1279523711 发表于 2024-3-22 20:39:38 | 显示全部楼层 <
                          回复

                          举报

                          業火死鬥我的天使GM吸血伯爵吃饱金币的Doge阿拉喵?神灯苏格兰圆脸胖鸡小小舞台永浴爱河肉垫手套御医神兔

                            毛茸茸兽兽 发表于 2024-3-22 20:58:37 | 显示全部楼层 <
                            阿巴阿巴(´×ω×`)虽然看不懂,但大受震撼.jpg
                            嘛~懂了,下次一口气换三个灵魂好了,能省就省
                            回复

                            举报

                            森林羊男瑞雪兆丰年,生灵万物新牧羊人特殊-家园卫士Ⓛ特殊-家园卫士Ⓡ【新手友好】昆進

                              还不能睡 发表于 2024-3-22 20:59:30 | 显示全部楼层 <
                              回复

                              举报

                              脉律辐石劫掠核芯御医神兔夏日柯基幽灵竹筒黄金树的恩惠探险三杰士图腾饼干生活拍立得璀璨金币

                                chouki 发表于 2024-3-22 21:00:01 | 显示全部楼层 <
                                回复

                                举报

                                胡子贴纸守卫: 坚守眼位『钜鲸』御医神兔哀恸魔蝶镜中小鸟孔明灯菀叶狸猫猪庇特小狮欢舞

                                  cdcai 发表于 2024-3-22 21:07:50 | 显示全部楼层 <
                                  回复

                                  举报

                                  胡子贴纸

                                    wdhgzdhcxb 发表于 2024-3-22 21:11:12 | 显示全部楼层 <
                                    因为泥潭有批量单点献祭的脚本,发现之后都直接用脚本了,后来也只换咒术没换过别的了
                                    羡慕楼主的求真精神,虽然我看得似懂非懂
                                    当然这3只灵魂的一点血跟我也没有任何关系就对了
                                    回复

                                    举报

                                    『召唤好运的角笛』『分析天平』『落樱缤纷』劫掠核芯『伊黎丝的赞词』脉律辐石永远的克叔【夏日限定】夏日的泰凯斯凯登‧阿兰科骑兽之子

                                      边山月 发表于 2024-3-22 21:19:23 | 显示全部楼层 <
                                      回复

                                      举报

                                      恶魔城『不败之花』璀璨闪蝶无瑕的回忆近地夜航

                                        夏漏光微 发表于 2024-3-22 21:50:05 手机端 | 显示全部楼层 <
                                        大学时老师课上讲过这个
                                        不同位数,浮点数的运算会导致意想不到的错误
                                        当时并不明白
                                        后来屡屡在知乎以及其他地方看到匪夷所思的错误只能感叹一句
                                        真的厉害
                                        回复

                                        举报

                                        安德鲁·库珀索尔·奥丁森安德森‧戴维斯走出失恋阴影的罗罗詹米·多南

                                          bigbigbig3 发表于 2024-3-22 22:00:33 | 显示全部楼层 <
                                          回复

                                          举报

                                          您需要登录后才可以回帖 登录 | 立即注册

                                          本版积分规则

                                          关闭

                                          站长公告

                                          【抵制账号违规交易】
                                          【抵制账号违规交易】
                                          请珍惜自己的论坛账号! 本BBS论坛禁止任何形式的账号买卖, 本站亦没有任何账号贩售交易途径!经查证账号为购买/或无法证明账号归属的用户将会被永久封禁。

                                          查看 »

                                          文字版|手机版|小黑屋|GameMale

                                          GMT+8, 2025-5-25 15:24 , Processed in 0.178829 second(s), 144 queries , Redis On.

                                          Copyright © 2013-2025 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表