(点击上方公众号,可快速关注)
进入话题前先闲扯几句,聊一下今年的就业形势。最近出来两则新闻:
1)一北航22届的朋友,拿跟去年几乎同样的简历找工作,去年收到了拿到了网易、快手、美团、百度、蔚来、B站的Offer,结果今年百度通过简历筛选,蔚来还在评估,快手和网易简历直接挂,阿里直接简历挂(去年是挂在hr面);
2)毕业生企业就业率呈下降趋势,“985”毕业生涌入县城。
感同身受,从20年疫情以来,就业行情逐年恶化。身边想找工作的朋友,普遍反映工作难找,投出的简历石沉大海;我们公司是中型的互联网企业,前两年招人的标准已经卡在硕士学历,好点的学校稍微宽松点,本科生优秀的话也可以进来,今年招聘的标准直接提高到本硕双985,而且HR根本不愁收不到简历;好多人研究生毕业找不到工作干起了外卖。。。各行各业都在艰难地前行。
作为同在艰难前行的人,这是我的一些建议:
什么时候困难好转?疫情是造成这波困境比较重要的方面,按照正常的事物发展的曲线,即使疫情现在完全得到控制,也得需要1~2年左右才能恢复到疫情前的水平。所以大家要做好长期准备,做好风险预案。
努力提升自己,时刻准备着。机会是留给有准备的人的,虽鸡汤但不毒,不卷是不可能的。最近我也在逐步提高阅读量、写作量、学习量,还没怎么着眼睛红了2天,还需要适应,果然年轻好啊。
下面进入正题。
问题背景
在写Haskell程序时,用到了floor
函数,用起来非常丝滑,由于觉得理所当然,竟不明所以,遂产生了这个话题。
丝滑的原因:在Haskell里,floor
是返回整数的,而在C++里返回浮点数,如果你需要整数类型,需要自己转换。在Haskell里,少了转换所以这个过程顺畅多了。
下面是Haskell里floor
函数的类型,接受一个浮点类型,返回整型。
floor :: (RealFrac a, Integral b) => a -> b
下面是C/C++里的floor
相关函数的声明,API文档对此的介绍“Computes the largest integer value not greater than arg
.”,明明说了返回整数,却返回浮点数,估计很多人有同样的问题。
float floorf(float arg);
double floor(double arg);
long double floorl(long double arg);
孰优孰劣,为什么
除了C/C++,其他比较常用的编程语言,如Java、Golang、OCaml、Rust等也采用了同样的策略。之所以这么做主要有两方面考量:
float
、double
的范围要远大于int32_t
、int64_t
等整型float
的范围:-3.4E+38 ~ 3.4E+38double
的范围:-1.7E-308~1.7E+308int32_t
的范围:-2,147,483,648(约-2.1E9)到 2,147,483,647(约2.1E9)int64_t
的范围:-9,223,372,036,854,775,808(约-9.2E18)~ (+9,223,372,036,854,775,807 (约9.2E18)int128【不是标准定义,需要编译器扩展】范围也不如
float
。整型无法表示某些特殊的浮点数
Haskell中的
Integer
可以表示任意精度的整数,即使这样,还是无法表示某些浮点数,即FP_INFINITE
【无穷】、FP_NAN
【Not A Number】。再大的整数也无法表示无穷大,再小的整数也无法表示无穷小;本身不是一个数,更不可能用整数表示了。
而返回浮点数,就可以采用IEEE 754标准表示这些值。
综上,虽然Haskell的处理方式提供了某种便利,但在合理性上不如C/C++的处理方案。
喜欢我的文章,请关注我的公众号。转载请标明出处。