gpt4 book ai didi

检查 double 是否可以被 C 中的另一个 double 整除?

转载 作者:太空狗 更新时间:2023-10-29 16:31:48 26 4
gpt4 key购买 nike

在 C 中如何检查 double x 是否能被另一个 double y 整除?对于整数,我只会使用模数,但是使用 double 的正确/最佳方法是什么?

我知道 float 不精确,但我从标准输入中得到了 double 。也许我不应该立即将其扫描为 double ,而是扫描为两个整数,但从那时起我该去哪里呢?

最佳答案

标准头文件 math.h 定义了以下函数:

  • double fmod(double x, double y);
  • float fmodf(float x, float y);
  • long double fmodl(long double x, long double y);

这些函数返回 x 除以 y 的余数的结果。结果与 x 的符号相同。您可以对 double 数字 xy 使用 r = fmod(x, y);,并检查是否r == 0。如果您不想测试精确 整除性但想增加一些公差,那么您可以检查r 是否“足够接近”0 或y (感谢咖啡馆)。

fmodf()fmodl() 在 C99 中是新的。

编辑:C99 还定义了一个单独的remainder(double x, double y) 函数,它返回x/y 的余数。来自 http://docs.sun.com/source/806-3568/ncg_lib.html :

The remainder(x,y) is the operation specified in IEEE Standard 754-1985. The difference between remainder(x,y) and fmod(x,y) is that the sign of the result returned by remainder(x,y) might not agree with the sign of either x or y, whereas fmod(x,y) always returns a result whose sign agrees with x. Both functions return exact results and do not generate inexact exceptions.

...

When y ≠ 0, the remainder r = x REM y is defined regardless of the rounding mode by the mathematical relation r = x - ny, where n is the integer nearest the exact value of x/y; whenever | n - x/y | = 1/2, then n is even. Thus, the remainder is always exact. If r = 0, its sign shall be that of x. This definition is applicable for all implementations.

(fmod()remainder() 应该适合您。)

关于检查 double 是否可以被 C 中的另一个 double 整除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2083290/

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