我使用half.hpp头文件在程序中使用半精度格式。在此头文件运算符> =中,对于类型一半的重载如下:
inline HALF_CONSTEXPR_NOERR bool operator>=(half x, half y)
{
return !detail::compsignal(x.data_, y.data_) &&
((x.data_^(0x8000|(0x8000-(x.data_>>15))))+(x.data_>>15)) >= ((y.data_^(0x8000|(0x8000-(y.data_>>15))))+(y.data_>>15));
}
在main.cc文件中包含half.hpp文件,代码如下:
int main() {
double a= 3.4;
half b (3);
if (a >= b)
.
.
.
return 0;
}
它已编译并创建了输出文件。 但是当我编写下面的代码时,遇到错误:
int main() {
double a= 3.4;
half b (3);
operator >= (a,b);
.
.
.
return 0;
}
error: could not convert 'b' from 'double' to 'half'
我想知道这两个代码的原因和区别吗?我找不到合乎逻辑的原因。