- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么 modf 的 intpart 输出强制为 double ?除非输入的整数部分本身是 double 值,否则根据定义,输出不是始终是整数。
int main ()
{
double p, fractpart, intpart;
fractpart = modf (p , &intpart);
}
最佳答案
modf
函数中断 double
参数分为整数部分和小数部分;例如,给定 3.75
它返回 0.75
和商店 3.0
在它的第二个参数指向的对象中。
问题是,如果你用一个太大而无法放入任何整数类型的值来调用它,会发生什么?
如果它返回 int
结果,甚至是 long long
或 intmax_t
结果,它必须以某种方式处理溢出,这可能需要添加一个额外的参数来区分有效结果和溢出。
通过返回 double
结果,溢出是不可能的;对于非常大的参数,它可以只返回参数值并将小数部分设置为 0.0
.它大大简化了功能。 (如果您想将结果转换为整数,您可以这样做——但您应该根据您使用的整数类型的边界检查结果。)
在现代系统上 double
通常是 64 位,并且可以精确地表示最多约 253 的整数。如果您调用 modf
值大于 253,则 double
value 本身不一定包含一个精确的整数值;有 modf
即使返回 64 位整数也不会提供任何额外的精度。
A long double
,取决于实现,可能能够保存比最宽的整数类型更广泛的精确整数值;在这样的系统上,制作 modfl
返回一个整数会失去相对于返回的精度 long double
.
所以有了 modf
(和 modff
和 modfl
)返回整数而不是浮点值会失去范围而没有任何相应的精度增益。
关于c - 为什么 modf 的 intpart 输出强制为 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25224947/
为什么 modf 的 intpart 输出强制为 double ?除非输入的整数部分本身是 double 值,否则根据定义,输出不是始终是整数。 int main () { double p,
我是一名优秀的程序员,十分优秀!