Floating point 是否可以检查;“长双”;正在使用的类型?
我希望应用程序能够知道它运行的系统的“long double”类型是“double”的同义词,还是真正的128位IEEE四精度,或者80位Intel扩展格式,或者是“double double”Floating point 是否可以检查;“长双”;正在使用的类型?,floating-point,double,long-double,Floating Point,Double,Long Double,我希望应用程序能够知道它运行的系统的“long double”类型是“double”的同义词,还是真正的128位IEEE四精度,或者80位Intel扩展格式,或者是“double double” 是否可以在运行时检查这一点?如何?sizeof是否满足您的要求?我不这么认为:sizeof(长双精度)将返回16,表示真正的128位IEEE、“双精度”,以及某些系统上的80位Intel。但是,它允许检查“longdouble”是否是系统中double的同义词。我没有办法测试所有提到的格式,所以不会写答
是否可以在运行时检查这一点?如何?sizeof是否满足您的要求?我不这么认为:sizeof(长双精度)将返回16,表示真正的128位IEEE、“双精度”,以及某些系统上的80位Intel。但是,它允许检查“longdouble”是否是系统中double的同义词。我没有办法测试所有提到的格式,所以不会写答案。您应该能够通过计算
1+eps-1
的适当值来区分这些格式。选择eps
,使较窄格式的结果为零,而下一个较宽格式的结果为eps
。例如,对于eps=0x1.0p-120
,1+eps
可以表示为双精度,但对于128位IEEE-754binary128
四精度格式,则舍入为1。您是否考虑了语言?例如,在C++ 11的