重现我如何相信这一点的步骤:
>>> 2 ** 4324567
Run Code Online (Sandbox Code Playgroud)
如果你厌倦了等待,键盘会中断上面的操作,因为比较操作只需要不到一秒,而上面的操作需要大约 20 秒。
>>> 2 ** 4324567 % 55
Run Code Online (Sandbox Code Playgroud)
您会注意到使用模数运算的速度要快得多。唯一可能的方法是使用中国剩余定理之类的东西,对吗?
奇怪的是,如果指数(即 2 的幂)是一个计算值(如2 * 2162283或ewhere e = 2 * 2162283),它似乎不会这样做。有人能解释一下这是怎么回事吗?
需要明确的是,我已经广泛测试了这段代码,发现问题出在 WGL 代码之前编写的代码中。正是在 WIN32 代码中。现在我认为这可能部分是由调用 gluOrth2D 引起的,但即便如此,据我所知,这不应该是主要原因。我可能会自己通过搞乱东西来解决这个问题,但考虑到这个问题(发生在一个更大的项目中)已经占用了我很多时间,我认为值得发布这个,以防其他人遇到同样的问题。我希望得到解释以及修复/更正。
#include <GL/glew.h>
#include <glfw3.h>
#define GLFW_EXPOSE_NATIVE_WGL
#define GLFW_EXPOSE_NATIVE_WIN32
#include <glfw3native.h>
constexpr int width = 1000, height = 1000;
bool running = true;
LRESULT CALLBACK WIN32_processMessage(HWND hwnd, UINT msg,
WPARAM wparam, LPARAM lparam)
{
return DefWindowProcA(hwnd, msg, wparam, lparam);
}
int main()
{
HINSTANCE hinst = GetModuleHandleA(NULL);
HICON icon = LoadIcon(hinst, IDI_APPLICATION);
WNDCLASSA* wc = (WNDCLASSA*)memset(malloc(sizeof(WNDCLASSA)), 0, sizeof(WNDCLASSA));
if (wc == NULL)
{
return -1;
}
wc->style = CS_DBLCLKS;
wc->lpfnWndProc = WIN32_processMessage;
wc->cbClsExtra = …Run Code Online (Sandbox Code Playgroud)