小编Omn*_*ity的帖子

整数除以7

来源我的回答:

这个表达式在C预处理器中是否正确

我有点不在这里,我试图了解这种特殊优化是如何工作的.

正如答案中提到的,gcc将整数除法优化为7:

mov edx, -1840700269
mov eax, edi
imul    edx
lea eax, [rdx+rdi]
sar eax, 2
sar edi, 31
sub eax, edi
Run Code Online (Sandbox Code Playgroud)

其转换为C为:

int32_t divideBySeven(int32_t num) {
    int32_t temp = ((int64_t)num * -015555555555) >> 32;
    temp = (temp + num) >> 2;
    return (temp - (num >> 31));
}
Run Code Online (Sandbox Code Playgroud)

我们来看看第一部分:

int32_t temp = ((int64_t)num * -015555555555) >> 32;
Run Code Online (Sandbox Code Playgroud)

为什么这个号码?

那么,让我们取2 ^ 64并将其除以7,看看弹出的是什么.

2^64 / 7 = 2635249153387078802.28571428571428571429
Run Code Online (Sandbox Code Playgroud)

这看起来像一团糟,如果我们把它转换成八进制怎么办?

0222222222222222222222.22222222222222222222222
Run Code Online (Sandbox Code Playgroud)

这是一个非常漂亮的重复模式,当然这不是巧合.我的意思是我们记得7是0b111,我们知道当我们除以99时,我们倾向于在基数10中得到重复模式.因此,当我们除以7时,我们在基数8中得到重复模式是有道理的.

那么我们的号码在哪里?

(int32_t)-1840700269 是相同的 (uint_32t)2454267027

* 7 …

algorithm math optimization integer-division compiler-optimization

13
推荐指数
1
解决办法
1554
查看次数

适用于Linux平台库的Steam导致Qt应用程序错误行为

我目前在使用一个非常简单的启动器应用程序时遇到了困难,该应用程序旨在显示一个网页并有一些按钮来启动游戏.单击启动器内部的链接时,只需启动带有链接的默认Web浏览器,而不是接受和处理导航请求.

但是,通过Steam启动时,链接无法在新的Web浏览器中打开.确切的行为取决于环境,我有复制gvfs-openxdg-open挂起的报告,虽然在我的环境中,它只是给出鼠标指示firefox开启一瞬间并且​​什么都不做(包括没有根据strace发起的进程,可能与KDE的消息传递系统有关,我不知道).令人毛骨悚然的是,也有报道说它运作正常.因此,我遇到了一个严重的问题.

我已经设法将问题缩小到Steam,修改可执行文件的LD_LIBARRY_PATH以使用Steam的Linux平台.我已经将启动器所需的所有库与启动器捆绑在一起.

这是一个最小的可重复指南:

main.cpp中

#include <QApplication>
#include <QWebFrame>
#include <QDesktopServices>
#include <QNetworkRequest>
#include <QMessageBox>
#include <QWebView>

class WebPage : public QWebPage {
public:
  bool acceptNavigationRequest(QWebFrame*, const QNetworkRequest &request, NavigationType) {
    QDesktopServices::openUrl(request.url());
    return false;
  }
};

class WebView : public QWebView {
public:
  QWebView* createWindow(QWebPage::WebWindowType) {
    WebView* res = new WebView;
    WebPage* page = new WebPage;
    res->setPage(page);
    return res;
  }
};

int main(int argc, char *argv[]) {
  QApplication a(argc, argv);

  WebView v;
  v.load(QUrl("http://example.com/"));
  v.show();

  return a.exec(); …
Run Code Online (Sandbox Code Playgroud)

c++ linux qt steam

11
推荐指数
1
解决办法
672
查看次数

Rust还有已发布的语言格式标准吗?

我正在研究Rust编程语言,我试图找到一个权威的发布标准(或者至少是一个像ECMA标准或C++标准一样的文档),它定义了语法语言和图书馆.

这样的事情存在吗?还是仍在进行中?

如果它不存在,最接近的资源是什么?

standards language-lawyer rust

9
推荐指数
1
解决办法
1471
查看次数

C++ 11交叉编译器/标准库随机分布的可重复性

虽然随机引擎需要在每个编译器上给出相同的数字序列.至少一些随机分布不是,只要求它们满足统计和概率阈值.举个例子:

#include <random>
#include <iostream>

int main() {
  std::mt19937 foo;
  std::uniform_int_distribution<int> bar(0, 1000);

  for (int i=0; i<99; ++i) {
    bar(foo);
  }

  std::cout << bar(foo) << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当根据(我的版本)libstdc ++和89编译时,将针对libc ++编译时打印808.

无论您给出的合规环境如何,哪些标准提供的分配功能(如果有)可以保证产生一致的结果?

c++ random language-lawyer c++11

9
推荐指数
1
解决办法
552
查看次数

使用多语句lambda返回类型推导

我一直在编写代码,我最近发现g ++没有警告我某类问题:根据C++ 11 5.1.2.4,如果你的lambda不是单个return语句那么返回类型必须声明为尾随返回类型或无效.

虽然g ++被允许编译无效的代码,如果它有足够的意义,是否有办法关闭此行为(允许-fpedantic在g ++ - 4.7中)或至少警告它?

示例代码:

[]() { return 0; } //is fine
[&a]() { a++; return 0; } //is not fine but g++ doesn't warn me
[&a]() -> int {a++; return 0; } //is fine again
Run Code Online (Sandbox Code Playgroud)

C++ 11 5.1.2.4

实现不应将rvalue引用类型的成员添加到闭包类型.如果lambda表达式不包含lambda声明符,那就好像lambda声明符是().如果lambda表达式不包含trailing-return-type,则就好像trailing-return-type表示以下类型:

- 如果compound-statement的格式为
{attribute-specifier-seq(opt)返回表达式; }
返回的表达的左值到右值转换(4.1),阵列到指针转换(4.2),和功能到指针转换(4.3)后的类型;

- 否则,无效.

c++ lambda g++ c++11 trailing-return-type

8
推荐指数
1
解决办法
1110
查看次数

Qt:在默认浏览器中打开带目标的链接,不会泄漏内存

通过互联网搜索,我遇到了很多方法,大多数是非功能性的,非特定的或部分功能性的,用于处理QWebView和打开URL.

经过多次咒骂和诅咒之后,我成功地做了一个例子来做我想要的事情,通常是开放的普通链接,打开任何在外部浏览器中请求新窗口的东西; 然而,有一个障碍.它泄漏了内存,因为我做了一堆额外的WebViews,在进程退出之前没有清理.如何在不泄漏记忆的情况下做到这一点?

请提前原谅我对Qt的二年级理解.在这一点上我只用了几个小时.

SSCCE:

test.hpp

#include <QMainWindow>
#include <QWebView>

class Window : public QMainWindow {
  Q_OBJECT

public:
  Window();

private:
  QWebView* m_web;

private slots:
};

class WebPage : public QWebPage {
  Q_OBJECT

public:
    bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
};

class WebView : public QWebView {
  Q_OBJECT

public:
  QWebView* createWindow(QWebPage::WebWindowType type);
};
Run Code Online (Sandbox Code Playgroud)

TEST.CPP

#include <QApplication>
#include <QGridLayout>
#include <QNetworkRequest>
#include <QDesktopServices>

#include "test.hpp"

Window::Window() :
    QMainWindow() {
  m_web = new WebView;
  m_web->setHtml("<div align=\"center\"><a href=\"http://www.google.com/\">Same …
Run Code Online (Sandbox Code Playgroud)

c++ qt memory-leaks qwebview

7
推荐指数
1
解决办法
1321
查看次数

测试对象是否已被移动

我正在测试我的容器包装器是否正确实现URefs.我能想到的唯一明显的方法是试图找出一种检测物体是否被移动的方法.

有没有一种好的测试方法可以确保没有复制对象?还是有另一种方法来测试我想要的东西?我更喜欢不需要修改我正在测试的类的解决方案.因为有几十个.

你能提供一些关于你有什么的更多信息吗?就像你的容器,你如何使用它,你能否修改它等等.也许你可以在不修改容器的情况下测试它,而是使用特殊的容器元素类型 - 跟踪副本和移动.

几个不同的容器和一些独立的模板功能.大多数情况下,它是围绕STL库类型的包装器,如deque,list,map,set等.

c++ move-semantics c++11 universal-reference

6
推荐指数
1
解决办法
1287
查看次数

这是否SFINAE模式有名字吗?

统治下的操作"从未有任何新的东西在阳光下,"我怀疑我是第一人想出这一招.我想我最终会偶然发现在线记录它的东西,但我还没有,所以我想我会问.

其目的是选择性地启用提供的某些功能,他们是相关的,不使用派生类.

这个模式有名字吗?而且没有人对这种模式或类似的经营模式的任何有用的信息?

template<typename T, size_t N>
class Point {
public:
  template<size_t P, typename T2=void>
  using Enable2D = typename std::enable_if<P == 2 && N == P, T2>::type;
  template<size_t P, typename T2=void>
  using Enable3D = typename std::enable_if<P == 3 && N == P, T2>::type;
  template<size_t P, typename T2=void>
  using Enable4D = typename std::enable_if<P == 4 && N == P, T2>::type;
  template<size_t P, typename T2=void>
  using Enable2DOrHigher = typename std::enable_if<P >= 2 && N == P, T2>::type;
  template<size_t P, typename T2=void>
  using …
Run Code Online (Sandbox Code Playgroud)

c++ templates design-patterns sfinae

6
推荐指数
1
解决办法
809
查看次数

JSON Patch RFC 中的波浪号如何转义?

参考http://tools.ietf.org/html/rfc6902#appendix-A.14

A.14. ~ 转义排序

示例目标 JSON 文档:

{
  "/": 9,
  "~1": 10
}
Run Code Online (Sandbox Code Playgroud)

一个 JSON 补丁文档:

[
  {"op": "test", "path": "/~01", "value": 10}
]
Run Code Online (Sandbox Code Playgroud)

生成的 JSON 文档:

{
  "/": 9,
  "~1": 10
}
Run Code Online (Sandbox Code Playgroud)

我正在编写这个 RFC 的一个实现,我一直坚持这个。这是要达到什么目的,它应该如何工作?

假设第一部分的答案是“允许引用包含 /s 的 json 键名”,你会怎么做?

json patch json-patch rfc6902

6
推荐指数
2
解决办法
1651
查看次数

Keras,级联多个 RNN 模型用于 N 维输出

我在以一种不寻常的方式将两个模型链接在一起时遇到了一些困难。

我正在尝试复制以下流程图:

级联 RNN 2-D

为清楚起见,在Model[0]我尝试从IR[i](中间表示)生成整个时间序列作为使用Model[1]. 该方案的目的是允许从一维输入生成参差不齐的二维时间序列(同时允许在不需要该时间步长的输出时省略第二个模型,并且不需要Model[0]不断地“在接受输入和生成输出之间切换模式)。

我假设需要一个自定义训练循环,并且我已经有一个自定义训练循环来处理第一个模型中的状态(以前的版本在每个时间步只有一个输出)。如图所示,第二个模型应该有相当短的输出(能够限制在少于 10 个时间步长)。

但归根结底,虽然我可以考虑我想做的事情,但我对 Keras 和/或 Tensorflow 还不够熟练,无法实际实现它。(事实上​​,这是我与图书馆的第一个非玩具项目。)

我在文献中搜索了类似的鹦鹉方案或示例代码,但没有成功。我什至不知道这个想法在 TF/Keras 中是否可行。

我已经让这两个模型独立工作。(正如我已经计算出维度,并使用虚拟数据进行了一些训练以获得第二个模型的垃圾输出,第一个模型基于此问题的先前迭代并且已经过全面训练。)如果我有Model[0]Model[1]作为python变量(让我们称它们为model_amodel_b),那么我将如何将它们链接在一起来做到这一点?

编辑添加:

如果这一切都不清楚,也许拥有每个输入和输出的维度会有所帮助:

每个输入和输出的维度是:

输入:(batch_size, model_a_timesteps, input_size)
红外:(batch_size, model_a_timesteps, ir_size)

IR[i] (复制后): (batch_size, model_b_timesteps, ir_size)
Out[i]: (batch_size, model_b_timesteps, output_size)
Out:(batch_size, model_a_timesteps, model_b_timesteps, output_size)

python keras tensorflow recurrent-neural-network tf.keras

6
推荐指数
1
解决办法
308
查看次数