gpt4 book ai didi

c - 为什么 modf 的 intpart 输出强制为 double ?

转载 作者:行者123 更新时间:2023-12-04 09:42:34 24 4
gpt4 key购买 nike

为什么 modf 的 intpart 输出强制为 double ?除非输入的整数部分本身是 double 值,否则根据定义,输出不是始终是整数。

  int main ()
{
double p, fractpart, intpart;

fractpart = modf (p , &intpart);

}

最佳答案

modf函数中断 double参数分为整数部分和小数部分;例如,给定 3.75它返回 0.75和商店 3.0在它的第二个参数指向的对象中。

问题是,如果你用一个太大而无法放入任何整数类型的值来调用它,会发生什么?

如果它返回 int结果,甚至是 long longintmax_t结果,它必须以某种方式处理溢出,这可能需要添加一个额外的参数来区分有效结果和溢出。

通过返回 double结果,溢出是不可能的;对于非常大的参数,它可以只返回参数值并将小数部分设置为 0.0 .它大大简化了功能。 (如果您想将结果转换为整数,您可以这样做——但您应该根据您使用的整数类型的边界检查结果。)

在现代系统上 double通常是 64 位,并且可以精确地表示最多约 253 的整数。如果您调用 modf值大于 253,则 double value 本身不一定包含一个精确的整数值;有 modf即使返回 64 位整数也不会提供任何额外的精度。

A long double ,取决于实现,可能能够保存比最宽的整数类型更广泛的精确整数值;在这样的系统上,制作 modfl返回一个整数会失去相对于返回的精度 long double .

所以有了 modf (和 modffmodfl )返回整数而不是浮点值会失去范围而没有任何相应的精度增益。

关于c - 为什么 modf 的 intpart 输出强制为 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25224947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com