Fortran Coder

查看: 22284|回复: 7
打印 上一主题 下一主题

[数值问题] t是 时间,mod是什么意思?请问这个式子是什么意思呢?

[复制链接]

70

帖子

25

主题

0

精华

专家

F 币
263 元
贡献
176 点
跳转到指定楼层
楼主
发表于 2018-5-2 05:41:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
if (mod(t, 50)==0)
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1642 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2018-5-2 08:05:42 | 只看该作者
mod(a,b) 是求 a 对 b 的余数。

3

帖子

0

主题

0

精华

入门

F 币
31 元
贡献
17 点
板凳
发表于 2021-4-27 10:42:23 | 只看该作者
fcode 发表于 2018-5-2 08:05
mod(a,b) 是求 a 对 b 的余数。

老师你好,请问 a = mod(39.0_8,0.39_8) 为啥不是0,a已经定义为双精度了,结果是0.389999.......

54

帖子

0

主题

0

精华

实习版主

F 币
653 元
贡献
214 点

元老勋章新人勋章

QQ
地板
发表于 2021-4-27 15:23:23 | 只看该作者
SSLATELE 发表于 2021-4-27 10:42
老师你好,请问 a = mod(39.0_8,0.39_8) 为啥不是0,a已经定义为双精度了,结果是0.389999....... ...

mod 是如下定义:
   mod(A,B) = A - int(A/B) * B
modulo 是如下定义:
   modulo(A,B) = A - floor(A/B) * B

因此,你要得到 0.0,建议用 modulo
a = modulo(39.0_8,0.39_8)

3

帖子

0

主题

0

精华

入门

F 币
31 元
贡献
17 点
5#
发表于 2021-4-27 15:38:22 | 只看该作者
布衣龙共 发表于 2021-4-27 15:23
mod 是如下定义:
   mod(A,B) = A - int(A/B) * B
而 modulo 是如下定义:

谢谢老师指点,我再去研究一下

5

帖子

0

主题

0

精华

入门

F 币
44 元
贡献
21 点
6#
发表于 2021-4-27 16:47:34 | 只看该作者
modulo 也不能保证能得到 0.0

A - int(A/B) * B 和 A - floor(A/B) * B 应该是数学意义上的表达式

不同的编译器的具体表现不一样,
我试了 intel 的编译器 modulo(39.0_8,0.39_8) = 0.0
但 mingw modulo(39.0_8,0.39_8) 跟 mod(39.0_8,0.39_8) 结果一样都不是 0.0

所以实数因为舍入误差的问题,mod 运算需要特别的小心

54

帖子

0

主题

0

精华

实习版主

F 币
653 元
贡献
214 点

元老勋章新人勋章

QQ
7#
发表于 2021-4-28 08:09:45 | 只看该作者
GCC-gfortran 对 modulo 的定义是和 mod 一样的。故而不适合楼主。
此时,应该自己书写 modulo 函数

[Fortran] 纯文本查看 复制代码
program hello
   Print *, moduu(39.0_8,0.39_8)
contains
  real(8) Function moduu(a,b)
    real(8) :: a , b
    moduu = A - floor(A/B) * B
  end function
end program Hello

3

帖子

0

主题

0

精华

入门

F 币
31 元
贡献
17 点
8#
发表于 2021-4-28 17:14:46 | 只看该作者
谢谢两位老师,我用的是intel的编译器,我发现用公式A - int(A/B) * B 或 A - floor(A/B) * B 都可以得到0.0,看来mod是要谨慎一些使用,我现在直接采用公式的方法来计算
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-26 11:48

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表