我想知道在Visual C++中是否真的没有128位除法内部函数?
有一个名为_umul128()的64x64 = 128位乘法内部函数,它很好地匹配MUL x64汇编程序指令.
当然,我假设也会有一个128/64 = 64位内部分区(对DIV指令进行建模),但令我惊讶的是,Visual C++和英特尔C++似乎都没有它,至少它没有在intrin.h中列出.
有人可以证实吗?我尝试grep'ing在编译器可执行文件中的函数名称,但首先找不到_umul128,所以我想我看错了.
更新:至少我现在在Visual C++ 2010的c1.dll中找到了模式"umul128"(没有前导下划线).所有其他内在函数都列在它周围,但不幸的是没有"udiv128"之类的东西:(所以它似乎他们真的"忘记"实施它.
澄清一下:我不只是在寻找128位数据类型,而是在C++中将128位标量int除以64位int的方法.无论是一个内在的功能或本地 128位整数的支持会解决我的问题.
编辑:答案是否定的,Visual Studio 2010或2012中没有_udiv128内在函数.
我遇到了代码语法d //= 2,其中d是一个变量.这不是任何循环的一部分,我不太明白.
有人可以开导我吗?
python python-2.x integer-division python-3.x floor-division
//Python 的"整数除法"运算符让我感到惊讶,今天:
>>> math.floor(11/1.1)
10.0
>>> 11//1.1
9.0
Run Code Online (Sandbox Code Playgroud)
该文档读取"x和y"的"(浮动)商".那么,为什么math.floor(11/1.1)等于10,但是11 // 1.1等于9?
我记得在java中,模运算符可以被反转,这样你可以反转它,而不是看到余数是什么操作,所以它会告诉你很多次数除以:
Console.WriteLine(1000 % 90);
Console.WriteLine(100 % 90);
Console.WriteLine(81 % 80);
Console.WriteLine(1 % 1);
Run Code Online (Sandbox Code Playgroud)
输出:
示例由DotNetPerls提供
我想看看'80'进入'81'多少次,而不是看剩下的.哪个应为1,余数为1.
c#modulo运算符是否支持此行为?如果没有,怎么可能达到预期的行为?用最少的代码请...:D
编辑:
我想答案是简单的,比如将两个数字分开并去除' - .#'值并保持整数' - ' - '.我知道这一点,但必须有一个更明智的方式这样做?
Python中的模数令人困惑.
在Python中,%运算符正在计算余数:
>>> 9 % 5
4
Run Code Online (Sandbox Code Playgroud)
然而:
>>> -9 % 5
1
Run Code Online (Sandbox Code Playgroud)
为什么结果1?不是-4吗?
为什么-103/100 == -2只103/100 == 1用Python?我似乎无法理解为什么.
它是安全的更换a/(b*c)与a/b/c使用上的正整数整数除法时a,b,c,还是我在可能失去信息?
我做了一些随机测试,找不到一个例子a/(b*c) != a/b/c,所以我很确定它是安全的,但不太确定如何证明它.
谢谢.
在Python中,使用//除法强制结果为整数。乘法有等价的吗?
例如,假设我有一个整数W,我按 float 缩放f。最好有一个像 这样的运算符.*,这样:
int(W*f)==W.*f
会是真的。
整数除法的硬件指令历来非常慢。例如,对于 64 位输入,Skylake 上的 DIVQ 延迟为 42-95 个周期 [1](吞吐量倒数为 24-90)。
然而,有更新的处理器,其性能要好得多:Goldmont 具有 14-43 延迟,Ryzen 具有 14-47 延迟 [1],M1 显然具有“每分频 2 个时钟周期的吞吐量”[2],甚至 Raspberry Pico 也具有“8 -循环有符号/无符号除法/模电路,每个核心”(尽管这似乎适用于 32 位输入)[3]。
我的问题是,发生了什么变化?是否发明了新的算法?无论如何,新处理器采用什么算法进行除法?
[1] https://www.agner.org/optimize/#manuals
[2] https://ridiculousfish.com/blog/posts/benchmarking-libdivide-m1-avx512.html
[3] https://raspberrypi。 github.io/pico-sdk-doxygen/group__hardware__divider.html#details
我之前错误地认为%运算符返回余数,而mod运算符返回模数(当操作数均为正数或均为负数时,余数和模数相同,但当一个操作数为正而另一个操作数为负时,余数和模数不同。比较 Raket\' s余数和模函数)。
然而,这根本不正确 \xe2\x80\x93 两者%并mod返回模数;都不返回余数。事实上,如果使用相同的参数调用,它mod看起来总是会返回完全相同的值。%据我所知,唯一的区别是%可以使用非整数参数调用,而如果使用ormod以外的任何参数调用则抛出异常。Int:Dint
那么,有什么意义呢mod?使用它是否会带来一些性能提升(也许可以通过节省优化器的一些专业化工作?)或者我缺少一些其他差异?
integer-division ×10
python ×5
modulo ×2
python-2.x ×2
python-3.x ×2
128-bit ×1
arm ×1
c# ×1
floor ×1
intrinsics ×1
math ×1
performance ×1
raku ×1
rakudo ×1
visual-c++ ×1
x86 ×1