可这样:
这仅适合float.init
,但如果操作它并返回nan
,那不一定是真的,因为nans
有几种位模式
.
同小类型比较,会提升.
除了T.nan
还有其他类型NaN
吗?如何生成它们?
0F/0F is float.nan
是真.
与大小
无关,而是nan
们可以不同形式出现.考虑:
该与float.init
不一样,
这样来零初化:
int.min
并不是真正的NaN
.
但它应该是!int.min
是臭名昭著的虚假值
.甚至不能在它上面使用abs()
:它要么给你不同类型,要么返回垃圾
.
我在每个程序
中做的第一件事就是精确
定义:byte/short/int/long
的别名,置T.min+1
为实际最小值
.
不必自己写;可用std.checkedint
的Checked!(int,WithNaN)
,在此
可以这样,用std.typecons.Typefef
:
但是,可能会在中间结果
中丢失类型信息
:
包含NaN
和无穷大
等值理由:重点是简化
错误处理,并允许延迟
处理错误.
alias this
是隐式转换工具.
个人喜欢D的做法.一旦你知道浮点
有个"无"
的方便初化值
,同样原因null
是指针和类引用
的方便初化值.但如果我不知道NaN
,这会很烦人.最大弱点
是它违背了C,C++
和C#
(等其他语言)做法,很容易让人感到惊讶
.
背后重要理念
是D总是用"空"值
作为初化值
(如果有的话).
另一方面,程序员可显式初化
变量为float.nan
.
我在每个程序
中都包含它,且从不使用其他有符号
整数(正值
用于位操作
,而不是计算).checkedint
应只是int
类型,而不是模块
.