Floating point 是否可以检查;“长双”;正在使用的类型?

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的同义词。我没有办法测试所有提到的格式,所以不会写答

我希望应用程序能够知道它运行的系统的“long double”类型是“double”的同义词,还是真正的128位IEEE四精度,或者80位Intel扩展格式,或者是“double double”


是否可以在运行时检查这一点?如何?

sizeof是否满足您的要求?我不这么认为:sizeof(长双精度)将返回16,表示真正的128位IEEE、“双精度”,以及某些系统上的80位Intel。但是,它允许检查“longdouble”是否是系统中double的同义词。我没有办法测试所有提到的格式,所以不会写答案。您应该能够通过计算
1+eps-1
的适当值来区分这些格式。选择
eps
,使较窄格式的结果为零,而下一个较宽格式的结果为
eps
。例如,对于
eps=0x1.0p-120
1+eps
可以表示为双精度,但对于128位IEEE-754
binary128
四精度格式,则舍入为1。您是否考虑了语言?例如,在C++ 11的 <代码>中,使这相对容易。@ Brtthal:语言可以是C或C++,但我更喜欢避免版本要求,如C++ 11。无论如何,中的定义几乎适用于所有C编译器,可以提供相同的帮助。