C语言宏定义——一年有多少秒

让你定义一个宏,说出一年有多少秒:


答案如下:

#define SECONDS_PER_YEAR 60*60*24*365(UL)

“这样的好处是:写出公式而不用动手计算,让编译器给你计算,省脑子。重点是你还写出了结果的来源,条理清晰,便于阅读。还有,那个UL显示了你对数据大小的严谨,”


“切~用你说?谁不知道?”——看到这,很多人一定对这个帖子嗤之以鼻,相信这是很多C语言玩家烂熟于心的一个答案了吧?!


SECONDS_PER_YEAR就是秒每年吧——秒/年!


那么,一年到底有多少秒?我再换个问法,每年都一样么?闰年你又怎么解决?众所周知,每四年有一个闰年,这还不是全部,逢百年的时候你必须用年份除以四百,除得开才是闰年。


地球围绕太阳公转一周(即360度)的时间应该为365日6时9分10秒,即为一个恒星年。

地球的某点获得两次两次直射的间隔是365日5时48分46秒更加精确:365天5小时48分45.975456秒),即为一个回归年。

一个回归年折算成小数,大概是365.2422日,400年里多出了96.88天,而按四年一个闰年算,400年里少3个闰年,即总共97个闰年,闰年是调节回归年的。前边也提了闰年规则是四年一补,补多了要减去点,如果按恒星年补,四年一个闰年还不够,哪会让你四百年内还少三个闰年呢。



看到这里,相信各位小伙伴已经有答案了:

#define 365*24*60*60+5*60*60+48*60+46(UL)
//很有条理很清晰吧?怎么样,我说,你还不如用计算器了~~一定要加上文字注释~!!!

不过还有意外,他问的会不会是恒星年?恒星年就按如下定义

#define 365*24*60*60+6*60*60+9*60+10(UL)
//一定要加上文字注释~~告诉他这是恒星年

我们也看到,没有什么东西是那么精确的,如果按365天5小时48分45.975456秒算,那应该使用浮点数偷笑

31556925.9754456(这还不是绝对精度~~~)

如果按这个数,32位的浮点还是够用的。


怎么样,躺着中枪了吧,这么简单的C语言你都不会,回去面壁吧。


不过还有方法,你跟他说你这次定义的是日历非闰年:

#define SECONDS_PER_YEAR_Non_Leap_Year 60*60*24*365(UL)
#define SECONDS_PER_YEAR_Leap_Year 60*60*24*366(UL)

绕回来了大笑



深藏功与名,叫我胡学究

带上你的贞操和逻辑,欢迎较真抬杠,转发请注明出处。


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值