IT资讯
当前位置:草根网 > IT资讯 >  活动互动

我为Win10修复了一个bug

2019-07-23 10:34:24 N软网 编辑:草根 浏览数:26草根网

据这名开发者(下用 Peter 代称)介绍,他某日在 Reddit 闲逛时,一个位于 Windows 10 子版块下的帖子引起了他的注意。帖子内容如下:和大家一样,在计算两个日期之间的相隔天数时,Peter 也发现了关于...

据这名开发者(下用 Peter 代称)介绍,他某日在 Reddit 闲逛时,一个位于 Windows 10 子版块下的帖子引起了他的注意。帖子内容如下:和大家一样,在计算两个日期之间的相隔天数时,Peter 也发现了关于周数的描述明显是错误的,如此大的数值看起来应该是上溢或者下溢之类的问题,要不就是差一错误(off-by-one)等常见的逻辑错误。

本着对这个 bug 的好奇心,再加上?Windows 10 计算器是开源项目,Peter 认为解决这个问题应该不会太复杂,所以他希望亲自?#19994;?bug 并进行修复。

他先在自己的电脑上测试看是否能复现,按照帖子的示例,在测试 7.31-12.31 的间隔天数时,计算器返回的结果是正确的 —— “5个月”。接着 Peter 稍微改了一下日期,?#26576;?7.31-12.30?时,bug 复现了,计算器显示的值为:“5 months, 613566756 weeks, 3 days?#20445;?#36825;明显是错误的。

确定了 bug 的存在,Peter 决定从?Windows 计算器的 GitHub 仓库下载源码来研究一番。从 repo 把源码下载到本地后,由于在 IDE 运行?Windows 计算器项目需要 UWP workload,所以 Peter 还为?Visual Studio?添加了 UWP workload。不过 Peter 表示搭建开发环境也十分顺利,修?bug 第一步至此完成。

接着 Peter 打开了解决方案文件(solution file),查看 “Calculator” 项目,并?#27492;?#30456;关的任何文件。他?#19994;?#20102;界面文件DateCalculator.xaml,接着从相关的文件DateDiff_FromDate追踪到了DateCalculatorViewModel.cpp,最后?#19994;?code>DateCalculator.cpp。

然后 Peter 开始设置断点并观察相关变量的变化,他发现 final 变量DateDifference?的值有误。因此他判?#38505;?#20010; bug 不是由转换为字符串存在错误而导致的,而是实实在在的计算错误。

既然计算存在问题,那就看?#27492;?#30340;计算逻辑是如?#38382;?#29616;的。

Windows 计算器对间隔日期的计算逻辑用伪代码表示如下:

DateDifference?calculate_difference(start_date,?end_date)?{????uint[]?diff_types?=?[year,?month,?week,?day]????uint[]?typical_days_in_type?=?[365,?31,?7,?1]????uint[]?calculated_difference?=?[0,?0,?0,?0]
????date?temp_pivot_date
????date?pivot_date?=?start_date????uint?days_diff?=?calculate_days_difference(start_date,?end_date)????for(type?in?differenceTypes)?{
????????temp_pivot_date?=?pivot_date????????uint?current_guess?=?days_diff?/typicalDaysInType[type]?
????????if(current_guess?!=0)
????????????pivot_date?=?advance_date_by(pivot_date,?type,?current_guess)????????
????????int?diff_remaining????????bool?best_guess_hit?=?false
????????do{
????????????diff_remaining?=?calculate_days_difference(pivot_date,?end_date)????????????if(diff_remaining?<?0)?{????????????????//?pivotDate?has?gone?over?the?end?date;?start?from?the?beginning?of?this?unit
????????????????current_guess?=?current_guess?-?1
????????????????pivot_date?=?temp_pivot_date
????????????????pivot_date?=?advance_date_by(pivot_date,?type,?current_guess)
????????????????best_guess_hit?=?true
????????????}?else?if(diff_remaining?>?0)?{????????????????//?pivot_date?is?still?below?the?end?date
????????????????if(best_guess_hit)????????????????????break;
????????????????current_guess?=?current_guess?+?1
????????????????pivot_date?=?advance_date_by(pivot_date,?type,?1)
????????????}
????????}?while(diff_remaining!=0)

????????temp_pivot_date?=?advance_date_by(temp_pivot_date,?type,?current_guess)
????????pivot_date?=?temp_pivot_date?
????????calculated_difference[type]?=?current_guess
????????days_diff?=?calculate_days_difference(pivot_date,?end_date)
????}
????calculcated_difference[day]?=?days_diff????return?calculcated_difference
}

上面的代码主要做了这些事:先算出相差的年数、然后计算相差的月数、接着计算相差的周数、最后计算相差的天数。

分享到:

版权与免责声明:

凡未注明"稿件来源"的内容均为转载稿,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性;


本文地址:http://www.8179786.com/news/2019/07/23/62344335.html

转载本站原创文章请注明来源:草根网

行业聚焦

华硕飞行堡垒7笔记本今日开售:锐龙7

IT之家7月8日消息 据华硕官方消息,华硕飞行堡垒7笔记本今日开售,搭载锐龙7-3750H处理器和英?#25353;颮TX2060显卡,售价为7499元。硬件方面,华硕飞行...[详细]

自然堂冰肌水环保黑科技让消费者惊呼:原来公益可以这么玩!

原标题:自然堂冰肌水环保黑科技让消费者惊呼:原来公益可以这么玩!中国化妆品领军企业伽?#37117;?#22242;JALA旗下自然主义品牌自然堂源起喜马拉雅,在为消费者带来大自然的?#35272;?..[详细]

滴滴程维:顺风车上线不会?#26434;?#21033;为唯一目标

昨日,在滴滴举行的媒体沟通会上,滴滴创始人兼CEO程维表示,滴滴未?#27492;?#39118;车上线,也不会将盈利和规模当作唯一目标。他说,滴滴不仅仅是科技创新企业,也是社会服务企业...[详细]

任正非:华为“鸿蒙”系统有个“大失误”

近日,华为创始人任正非在接受外媒专访时提到,华为研发的操作系统“鸿蒙”比安卓速度快60%,但华为在与谷歌、苹果竞争时,有一个很大的失误,“我们仍然缺乏良好的应用...[详细]

威胁公司根基,高通请求上诉法院对反垄断判决搁置执行

?#26412;?#26102;间7月9日消息,高通公司在周一请求美国上诉法院在其上诉期间暂停执行一项反垄断判决。这项判决可能大幅改变高通的商?#30340;?#24335;。高通向美国第九?#19981;?#19978;诉法院提交了这一...[详细]

科技趋势

更多

航天器的未来:?#26412;?#25968;百米的反射镜照亮地球

 

今年是人类成功登月50周年。得益于太空技术的飞速发展,这一?#32961;?#25104;为可能。在阿波罗任务之前相当短的时间内,工程师们已经掌握...[详细]

安信SSL证书申请买一年送一年促销最后3天

 

  安信SSL官网自6·18年中大促推出证书申请买一年送一年的活动以来,便受到广大用户的关注。本次活动将于6月30日结束...[详细]

iQOO系列全新?#31245;眎QOO Neo即将亮相 背部后置竖排三摄

 

?#29616;埽琲QOO官方突然发声,正式对外公布iQOO系列的全新?#31245;眎QOO Neo,瞬间引发不少用户的关注。现在有最新消息,...[详细]

荣耀电视8月将与大家见面 或将重新连接家庭娱乐纽带

 

昨日,在荣耀举办的荣耀新品类沟通会上,荣耀宣布正式进入电视领域,并且将于8月份上旬推出自家的首款电视产品—荣耀智慧屏。虽...[详细]

联想推出Y7000P 2019款:9代i7+RTX 2060,9599元

 

IT之家7月18日消息 今天,联想推出了联想拯救者Y7000P 2019款,15.6英寸144Hz刷新?#21183;?#24149;,i7-97...[详细]

一周排行每月关注
完美世界手游隐藏任务大全飞行器
山东时时走势图百度百度贴吧 安徽快三5月20号开奖结果 7星彩软件下载 捕鱼大师官方网 上海时时情况 2018浙江二段剩余计划 七乐彩票大发快三 广东时时开结果 极速时时开奖大小 北京pk计划9码盈利表