尽管 ANSI C 未能定义一种可以干净地处理long double
格式不同于 from 的扩展精度类型的变量参数声明形式double
导致该类型在许多平台上被有效弃用(不幸的是,恕我直言,因为它是一个很好的type 不仅用于具有 x87 协处理器的系统,而且还用于没有 FPU 的系统),这是具有适当扩展精度类型的系统处理如下语句的唯一合理方法:
long double a = 0.1;
是使 0.1 数字文字的开始寿命long double
等于 14,757,395,258,967,641,293/147,573,952,589,676,412,928;将该语句设置a
为 7,205,759,403,792,794/72,057,594,037,927,936(大约 0.10000000000000000555,的值(double)0.1
)是荒谬的。
可以说,在某些情况下,在向下转换之前具有数字文字的开始生命long double
可能会导致它产生与以double
or开始生命时不同的值float
(例如,最接近float
的9007199791611905.0
是 9007200328482816,其中比请求的值高 536870911,但(float)(double)9007199791611905.0
产生 9007199254740992,低于它的 536870913。当然,如果想要浮点值 9007200328482816.0f,可能应该使用更接近实际想要的十进制表示。