我试图弄清楚如何将负无穷大的值赋给浮点数或双变量.似乎包括标准库限制,我可以获得无穷大表示,并且我知道(非常肯定)在前面添加一个减号(-infinity)可能会导致我在IEEE754浮点中寻找的值标准(因为0x7FFFFFFF可能会导致0xFFFFFFFF),但我甚至不确定,更不用说可能存在的其他标准(如果有的话).我发现它真的,非常不专业和依赖于实现.
当然,有没有一种方法可以独立获得负无限平台和实现的价值,否则我也可以使用#define,每个人都喜欢预处理.
我有一个N个元素的数组(表示给定字母表的N个字母),并且数组的每个单元格都包含一个整数值,该整数值表示该字母的给定文本中出现的次数.现在我想根据给定约束的出现次数随机选择字母表中所有字母的字母:
如果字母具有正(非零)值,那么它总是可以由算法选择(当然,概率更大或更小).
如果字母A的值高于字母B,则必须更可能由算法选择.
现在,考虑到这一点,我想出了一个可以完成这项工作的简单算法,但我只是想知道是否有更好的事情要做.这似乎是非常基础的,我认为可能有更聪明的事情要做,以便更有效地实现这一目标.这是我想的算法:
那么,还有比这更好的事情吗?我错过了什么吗?
我知道大多数现代计算机可以如此快速地计算这个,我甚至不会注意到我的算法是否效率低,所以这更像是一个理论问题而不是实际问题.
我更喜欢解释的算法,而不仅仅是答案的代码,但如果您更愿意在代码中提供答案,我对此没有任何问题.
我正在使用cmake在C++中构建我的项目.假设我的Source文件夹中有以下目录
Source
|_Dir1
| |_Class.cpp
| |_Class.hpp
|
|_Dir2
|_Main.cpp
Run Code Online (Sandbox Code Playgroud)
在Dir1中有一个包含其头文件和实现文件的类(Class.cpp和Class.hpp).
在Dir2中,主要的应用程序在Dir1中使用该类
告诉Dir2中的CMakeLists使用Dir1/Class.cpp文件构建可执行文件的好方法是什么?
编辑:更具体地说,我想定义Class.cpp的源文件必须在Dir1的CMakeLists.txt中使用,而不是在Dir2中.以另一种方式这样做对我来说是完全错误的并且很难使用,所以如果有理由他们强迫我这样做,那么对这个主题的一些澄清就会很好.
我目前正在做的是对Dir2/CMakeLists.txt中的Class.cpp文件位置进行硬编码,但是当我有一堆类在一起进行交互时,这只是不扩展.
我有一个数据集,我按以下方式将其分为训练和测试子集:
train_ind <- sample(seq_len(nrow(dataset)), size=(2/3)*nrow(dataset))
train <- dataset[train_ind]
test <- dataset[-train_ind]
Run Code Online (Sandbox Code Playgroud)
然后,我用它来训练 glm:
glm.res <- glm(response ~ ., data=dataset, subset=train_ind, family = binomial(link=logit))
Run Code Online (Sandbox Code Playgroud)
最后,我用它来预测我的测试集:
preds <- predict(glm.res, test, type="response")
Run Code Online (Sandbox Code Playgroud)
根据示例,此操作会失败并出现错误:
model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) 中的错误:因子具有新级别
请注意,该值出现在完整数据集上,但显然不在训练集上。我想做的是让预测函数忽略这些新因素。即使它已经对因子进行了二值化,我也不明白为什么它可以假设新值(因此,不是线性模型中的变量)只是 0,这会产生正确的行为。
有没有办法做到这一点?
给定数字n,以及大小为m的数组,其中m <n.假设数组中的每个数字介于0和n-1(含)之间,我希望尽可能有效地获得从0到n-1的nm数列表,这些数字不在数组中.
这就是我正在做的事情(伪代码),但感觉效率很低,我想知道是否有更好的方法:
int[] remaining (int[] assigned) {
Set<int> s
int[n-m] remaining
add each int in assigned to s
for(i = 0 to n-1)
if(not s.contains(i)) remaining.add(i);
}
Run Code Online (Sandbox Code Playgroud)
这不是任何特定的计算机语言,但它应该是ilustrative.我们假设访问数组当然是O(1),并且添加/检查集合是O(log(n)),因为AVL集合将是.所以基本上我试图在线性时间内得到它,而不是现在的O(n·logn),但是如果初始数组没有排序我不知道如何去做,或者甚至可能.
考虑这个简单的例子:
"use strict";
var Foo = {
field: 0,
func: function () {
this.field = 4;
}
}
Run Code Online (Sandbox Code Playgroud)
JSLint抛出错误:
出乎意料的'这个'.在"this.field = 4"行.
我在StackOverflow中似乎有一些问题要求这一点,在所有情况下,答案只是启用"容忍这个"标志.但是,我很感兴趣为什么JSLint创建者认为使用"this"是(或可能导致)错误.
另外,如何在没有"this"关键字的情况下实现成员函数,而不期望用户将实例作为第一个参数传递?
编辑也许我没有让自己明确这个问题,尽管看起来类似,但我没有回答我的问题:JSLint错误:意外'这个'
这个问题的问题不在于问题本身,而在于它得到的答案.请注意接受的答案是:"我的建议是:告诉JSLint关闭".我在帖子中特别说这对我来说不是一个有效的答案,因为我想理解为什么JSLint禁止使用这个,而不是如何避免这个错误.
执行这行代码的预期行为是什么?:
Foo f = someOtherObject.getFoo(); //We get a reference of a Foo object from another class
f = new Foo();
Run Code Online (Sandbox Code Playgroud)
someOtherObject.getFoo()会返回新对象,还是旧对象?如果我们更改第二行代码,该怎么办:
f = null;
Run Code Online (Sandbox Code Playgroud)
someOtherObjct.getFoo()会返回null,还是旧对象?
我做了一个函数来比较字符串(当然这是我正在做的一个练习,以便学习,我很清楚<,>运算符在大多数现代语言中都使用字符串).为了做一些递归我正在使用模式匹配函数,但我不确定发生了什么.这是我的代码:
compareStrings :: String -> String -> Char
compareStrings (x:xs) (y:ys)
| x > y = '>'
| x < y = '<'
| x == y = compareStrings xs ys
compareStrings [a] [b]
| a < b = '<'
| a > b = '>'
| a == b = '='
Run Code Online (Sandbox Code Playgroud)
因此,我的代码中有很多案例,例如一个空列表和一个单例列表,一个空列表和一个普通列表(多个元素).当然还有对称的对应物.我怎样才能确保检查它们?是否有什么东西在幕后?或者只是比较字符串(不是字符,这是我的意图)在某些时候,我不知道它?
我想知道测试指令是否可以与cmp一样使用。让我们说:
cmp %eax,%ebx
jg some_random_place
Run Code Online (Sandbox Code Playgroud)
如果 %ebx 大于 %eax,则跳转到 some_random_place,现在如果我这样做:
test %eax, %ebx
jg some_random_place
Run Code Online (Sandbox Code Playgroud)
在什么条件下会跳转?
我在SFML 2.1中有以下代码
类ResourceManager:
shared_ptr<Sprite> ResourceManager::getSprite(string name) {
shared_ptr<Texture> texture(new Texture);
if(!texture->loadFromFile(resPath+spritesPath+name))
throw new NotSuchFileException();
shared_ptr<Sprite> sprite(new Sprite(*texture));
return sprite;
}
Run Code Online (Sandbox Code Playgroud)
主要方法:(我将省略大部分不相关的代码
shared_ptr<Sprite> sprite = ResourceManager::getSprite("sprite.png");
...
while(renderWindow.isOpen())
renderWindow.draw(*sprite);
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这使我的精灵渲染完全变白,但如果我这样做:
shared_ptr<Sprite> ResourceManager::getSprite(string name) {
Texture* texture = new Texture; // <------- From shared pointer to pointer
if(!texture->loadFromFile(resPath+spritesPath+name))
throw new NotSuchFileException();
shared_ptr<Sprite> sprite(new Sprite(*texture));
return sprite;
}
Run Code Online (Sandbox Code Playgroud)
它完美地运作.
那么这里发生了什么?我假设共享指针只能用作指针.它会被删除吗?我的主要方法是保留对它的引用,所以我真的不明白这里发生了什么:S
编辑:我完全知道删除精灵不会删除纹理,这是产生我必须处理的内存泄漏,这就是为什么我试图在第一个地方使用智能指针...