节奏大师吧 关注:373,298贴子:8,603,687
  • 33回复贴,共1

【23-12-30】关于对战模式分数差1的一种猜测

只看楼主收藏回复

一般情况下. 对战模式不应出现分数相差1的情形. 但实际存在两个例子表明这种情形可以出现.
https://tieba.baidu.com/p/8810192738 及相关回帖.
本帖针对此现象给出合理猜测


IP属地:福建1楼2023-12-30 15:04回复



    IP属地:福建2楼2023-12-30 15:06
    收起回复
      原帖实验结果
      根据得分结果, 上述模拟过程采用了右侧的判定结果


      IP属地:福建3楼2023-12-30 15:07
      回复
        下面是R8吧友们的回复


        IP属地:福建4楼2023-12-30 15:08
        回复
          可以


          IP属地:福建5楼2023-12-30 15:11
          回复
            大佬可以的


            IP属地:浙江来自Android客户端6楼2023-12-30 16:40
            收起回复
              可以,不懂帮顶


              IP属地:福建来自Android客户端7楼2023-12-30 17:07
              收起回复


                IP属地:山东来自Android客户端8楼2023-12-30 17:57
                回复
                  居然用的我的图
                  好吧,确实浮点精度会出现这个问题,但我还是感觉是游戏本身的问题,他们过早的在游戏中引入可能产生浮点误差的操作(事先计算每个键分数),实际上完全可以采取累积等价大p的形式,累积等价大p至多小数点后2位,可以认为是不存在这种精度丢失的。
                  这种累积等价大p数方法至少可以保证比直接计算单键分数要精确,因为少了一步引入误差的运算


                  IP属地:山东来自iPhone客户端9楼2023-12-30 19:20
                  收起回复
                    一般情况最终分数带有小数,所以不会出现差1的情况,而音符总数1450,50000÷1450×87=3000,即最小分数差的87倍是整数,正好扣3000分,所以最终分数会出现1分的波动
                    一般情况,如果音符总数非2或5的倍数,那么绝对不可能出现这种情况
                    如果音符总数为2或5的倍数,那么它的因数中含有2或5的数量越多,越容易出现这种情况
                    比如说一首歌音符总数为1000,那么每个音符分数为整数,这种情况最终得分每个分数都有可能出现1分的波动
                    而且,分数比较整的那种(尾数好多个0)极易出现分数差1的情况
                    可能见的比较少,那是因为本身平局就少
                    但是很多人出现过所谓的非法分数,往往比正常分数少1


                    IP属地:山东来自Android客户端10楼2024-02-17 22:07
                    收起回复
                      事实上,我没见过哪首歌的音符总数为400,500,800,1000,2000等这种只有2和5两种因数的数,有没有可能是官方控制音符总数不会出现这些数,否则会导致PK每个音符分数均为整数从而大量出现因浮点bug造成的非法分数


                      IP属地:山东来自Android客户端11楼2024-02-17 22:17
                      收起回复
                        (回复楼上层内)一般情况,最终得分带有小数,比如说999123.4,那么浮点波动影响可以忽略(至于为什么可以忽略看完下文就知道了),如果最终得分不带有小数,比如说999123,那么由于浮点波动的影响,最终分数可能为999123.0000006或999122.9999997,即小数点之后第七位开始无法精确,所以前者为999123分,后者为999122分,由于向下取整的缘故可能会出现两个分数,其中999122是非法分数


                        IP属地:山东来自Android客户端12楼2024-02-18 10:26
                        收起回复
                          这个可以合理解释上述问题,不过解释不了满分1000000分为什么不会出现999999的情况


                          IP属地:山东来自Android客户端13楼2024-02-18 10:27
                          回复
                            (回复楼上层内)关于为什么会出现浮点波动,这是计算机特性,按理说可以提高精度,但是不能完全精准,具体的,楼主可以自行了解一下


                            IP属地:山东来自Android客户端14楼2024-02-18 11:08
                            回复
                              比如说,如果每个音符分数为1996/3,那么1500个满分音符分数为998000
                              但是实际上在计算时,计算机无法表示分数1996/3这种精确的数据,只能表示小数665.333333这种不完全精确的数据
                              由于浮点波动,每个音符分数可能会是665.3333332或665.3333335,向上波动或向下波动概率一样,所以最终分数趋近与998000分,但是也可能向上或向下波动(比如说998000.0000002或997999.9999997),再加上结果想下取整,所以会有1分的误差(如果改为四舍五入,那么出现998000.5这种情况也会有1分的误差)
                              我不知道可不可以做到取消浮点波动,如果可以,造成的后果是每个音符都是665.3333333(这是七位小数并非无限小数),都比最终1996/3小一点点,量变引起质变,最终分数是665.3333333×1500=997999.99995,比上面浮点波动得出的分数误差更大


                              IP属地:山东来自Android客户端15楼2024-02-18 11:15
                              收起回复