搜索
bottom↓
回复: 19

在Win7下重现Bug10的BUG [计算器BUG]

[复制链接]

出0入93汤圆

发表于 2019-6-28 07:14:59 | 显示全部楼层 |阅读模式
起因:看到这个我为 Windows 10 修复了一个 bug,我就看看我的Win7计算器有什么表现。
Windows的计算器BUG不知道发现了多少了,比一般专写BUG的程序员写的BUG还多还隐蔽
更NB的是,Win10的计算器是开源的,源代码的逻辑实在是看不懂,堪称简单问题复杂化的典范,可以作为我辈楷模,以后我们也要写这种又臭又烂还有隐藏BUG的代码。

计算日期间隔(请查看差(年、月、周、天)),我的版本是6.1.7601,不知道其他版本有没有这个问题:

其他三个都没有问题,就是下面这个,呵呵呵呵。




然后看看bug10关于日期之差的计算:
  1. DateDifference calculate_difference(start_date, end_date) {
  2.     uint[] diff_types = [year, month, week, day]
  3.     uint[] typical_days_in_type = [365, 31, 7, 1]
  4.     uint[] calculated_difference = [0, 0, 0, 0]
  5.     date temp_pivot_date
  6.     date pivot_date = start_date
  7.     uint days_diff = calculate_days_difference(start_date, end_date)

  8.     for(type in differenceTypes) {
  9.         temp_pivot_date = pivot_date
  10.         uint current_guess = days_diff /typicalDaysInType[type]
  11.         if(current_guess !=0)
  12.             pivot_date = advance_date_by(pivot_date, type, current_guess)
  13.         
  14.         int diff_remaining
  15.         bool best_guess_hit = false
  16.         do{
  17.             diff_remaining = calculate_days_difference(pivot_date, end_date)
  18.             if(diff_remaining < 0) {
  19.                 // pivotDate has gone over the end date; start from the beginning of this unit
  20.                 current_guess = current_guess - 1
  21.                 pivot_date = temp_pivot_date
  22.                 pivot_date = advance_date_by(pivot_date, type, current_guess)
  23.                 best_guess_hit = true
  24.             } else if(diff_remaining > 0) {
  25.                 // pivot_date is still below the end date
  26.                 if(best_guess_hit)
  27.                     break;
  28.                 current_guess = current_guess + 1
  29.                 pivot_date = advance_date_by(pivot_date, type, 1)
  30.             }
  31.         } while(diff_remaining!=0)

  32.         temp_pivot_date = advance_date_by(temp_pivot_date, type, current_guess)
  33.         pivot_date = temp_pivot_date
  34.         calculated_difference[type] = current_guess
  35.         days_diff = calculate_days_difference(pivot_date, end_date)
  36.     }
  37.     calculcated_difference[day] = days_diff
  38.     return calculcated_difference
  39. }
复制代码
反正我才疏学浅,只会把两个日期直接相减,惭愧。


本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2019-6-28 08:06:08 | 显示全部楼层
只是BUG,不是后门,后门很紧的。

出0入8汤圆

发表于 2019-6-28 08:11:14 | 显示全部楼层
要不楼主自己写一个? 怎么也得考虑闰年和月份日期吧,直接怎么减?

出0入57汤圆

发表于 2019-6-28 08:14:15 | 显示全部楼层
bug10上7-31~12-30是:5 月, 613566756 周, 3 天

出0入93汤圆

 楼主| 发表于 2019-6-28 08:50:51 | 显示全部楼层
icoyool 发表于 2019-6-28 08:11
要不楼主自己写一个? 怎么也得考虑闰年和月份日期吧,直接怎么减?

最烦的就是你这种不懂装懂还要抬杠的了,日期变换成年、月、日、周是有API的,直接调用就可以了,你管他具体怎么实现的。
我自己写啊,我是用Delphi的,让你看看DateUtils.pas提供的函数,其他语言也会有自己的函数库:

本帖子中包含更多资源

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

x

出0入93汤圆

 楼主| 发表于 2019-6-28 08:56:52 | 显示全部楼层
gamethink 发表于 2019-6-28 08:47
别以为简单,其实计算器的软件比较复杂的,一般人写不出来

说得好像我没有写过似的... 开源代码一大堆,现在已经不是单枪匹马造轮子的时代了,啥样的轮子都有。我自己写的高精度的,和微软的计算器对比下:

本帖子中包含更多资源

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

x

出0入26汤圆

发表于 2019-6-28 08:58:47 | 显示全部楼层
为啥我觉得win10是有史以来最好用的系统。
我装的LTSC 版本。

出0入0汤圆

发表于 2019-6-28 09:15:06 | 显示全部楼层
xly 发表于 2019-6-28 08:58
为啥我觉得win10是有史以来最好用的系统。
我装的LTSC 版本。

升级1903,先是vmware不能用了,虚拟机系统各种卡死,vmware卡死,关不掉,只能重启宿主系统,升级最新vmware解决。
然后发现显示屏亮度不能调,现在又好了。

出0入0汤圆

发表于 2019-6-28 11:08:54 | 显示全部楼层
写这么多代码就是避免调用API啊

出0入362汤圆

发表于 2019-6-28 11:13:35 | 显示全部楼层
计算日期间隔是最麻烦的。。。
特别是涉及古代日期,还得考虑1582年改历,以及改历在各国还不是一起执行,比如俄罗斯到十月革命以后才改。

出0入134汤圆

发表于 2019-6-28 12:37:06 | 显示全部楼层
原来还有这种BUG

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2019-6-28 15:08:33 | 显示全部楼层
试了一下,我被吓到了

本帖子中包含更多资源

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

x

出0入12汤圆

发表于 2019-6-28 18:20:48 | 显示全部楼层
BUG10,1803没有发现这个问题

出0入0汤圆

发表于 2019-6-28 18:35:30 | 显示全部楼层
xly 发表于 2019-6-28 08:58
为啥我觉得win10是有史以来最好用的系统。
我装的LTSC 版本。

我也这样觉得,不过我用的是专业版,并且一直保持最新.

出0入0汤圆

发表于 2019-6-28 18:35:59 | 显示全部楼层
mcu5i51 发表于 2019-6-28 15:08
试了一下,我被吓到了

至少总天数 152天是对的嘛

出0入0汤圆

发表于 2019-6-28 19:34:58 | 显示全部楼层
感觉楼主很厉害,
没错,我说的是语气!

出0入0汤圆

发表于 2019-6-28 21:49:57 | 显示全部楼层
我都不知道计算器还可以计算日期差这种骚操作

出0入0汤圆

发表于 2019-6-28 23:49:45 | 显示全部楼层
算天数差值是不是可以直接换成UTC的秒数,得到差值,然后除以每天秒数就能得到相差天数?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 05:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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