【发布时间】:2012-09-27 02:34:36
【问题描述】:
下面这段代码中的模有什么作用?
from math import *
3.14 % 2 * pi
我们如何计算浮点数的模数?
【问题讨论】:
下面这段代码中的模有什么作用?
from math import *
3.14 % 2 * pi
我们如何计算浮点数的模数?
【问题讨论】:
当你有表达式时:
a % b = c
这确实意味着存在一个整数 n,它使 c 尽可能小,但非负数。
a - n*b = c
您可以手动减去2(如果您的数字是负数,则添加2),直到最终结果是可能的最小正数:
3.14 % 2
= 3.14 - 1 * 2
= 1.14
另外,3.14 % 2 * pi 被解释为(3.14 % 2) * pi。我不确定您是否打算写3.14 % (2 * pi)(在任何一种情况下,算法都是相同的。只需减/加,直到数字尽可能小)。
【讨论】:
(-123) % 10 == 7,而在 C++ 等其他语言中结果是 -3。因为(-123) - (math.floor(-123/10)*10) == 7
与普通的模 3.14 % 6.28 = 3.14 相同,就像 3.14%4 =3.14 3.14%2 = 1.14(余数...)
【讨论】:
% 与/ 具有相同的优先级,这绝对低于 pow(尽管与 times 相同)。 3.14 % 2 * pi 与 (3.14 % 2) * pi == 1.14 * pi 相同,而不是 3.14 % (2 * pi)。
3.14 % ( 2*pi) 但是仍然是 3.14 我的示例试图用小于 3.14 的数字来证明... afaik 问题不是关于操作的顺序,而是嗯
除了其他答案之外,fmod documentation 关于这个主题还有一些有趣的事情要说:
math.fmod(x, y)返回
fmod(x, y),由平台C定义 图书馆。请注意,Python 表达式x % y可能不会返回相同的值 结果。 C 标准的意图是fmod(x, y)是 (数学上;精确到无限)对于某些人来说等于x - n*y整数 n 使得结果具有与x相同的符号和幅度 小于abs(y)。 Python 的x % y返回带有y符号的结果 相反,对于浮点参数可能无法完全计算。为了 例如,fmod(-1e-100, 1e100)是-1e-100,但是 Python 的结果-1e-100 % 1e100是1e100-1e-100,不能完全表示为浮点数,四舍五入到令人惊讶的1e100。为此原因, 函数fmod()在使用浮点数时通常是首选,而 处理整数时首选 Python 的x % y。
【讨论】:
fmod。谢谢!
你对普通模数的期望是一样的。 7 % 4 = 3, 7.3 % 4.0 = 3.3
注意浮点精度问题。
【讨论】:
你应该使用 fmod(a,b)
While abs(x%y) < abs(y) is true 在数学上,对于floats,由于roundoff,它在数字上可能不正确。
例如,假设Python float是IEEE 754双精度数的平台,为了-1e-100 % 1e100与1e100具有相同的符号,计算结果为-1e-100 + 1e100,即在数值上完全等于1e100。
数学模块中的函数fmod() 返回一个结果,其符号与第一个参数的符号匹配,因此在这种情况下返回-1e-100。哪种方法更合适取决于应用程序。
where x = a%b 用于整数模
【讨论】: