我发现uint64在Matlab中使用向量时存在不一致性.似乎uint64的数组并不是所有64位的精确数组.这没有给出我预期的输出,
p=uint64([0;0]);
p(1)=13286492335502040542
p =
13286492335502041088
0
Run Code Online (Sandbox Code Playgroud)
然而
q = uint64(13286492335502040542)
q =
13286492335502040542
Run Code Online (Sandbox Code Playgroud)
确实.它也在使用
p(1)=uint64(13286492335502040542)
p =
13286492335502040542
0
Run Code Online (Sandbox Code Playgroud)
使用无符号整数,人们期望一种特殊的行为,通常也是完美的精度.这看起来很怪异甚至有点不可思议.我没有用较小的数字看到这个问题.也许有人知道更多?我不认为这是一个未知的问题,所以我想必须有一些解释.我很高兴知道为什么会发生这种情况以及什么时候能够避免它.像往常一样,文档中没有提到这种问题.
Matlab 2014a,Windows 7.
编辑
值得一提的是,在直接定义数组时,我可以看到相同的行为.
p=uint64([13286492335502040542;13286492335502040543])
p =
13286492335502041088
13286492335502041088
Run Code Online (Sandbox Code Playgroud)
这就是我问这个问题的根本原因.我很难看到这种情况的解决方法.
我已经来回试了很长时间,但不知何故它不起作用.
我也尝试过分号和不分号.我也尝试在断点之前运行这一行,以确保条件真正起作用,
logger.error("I am Here! " + "#PDU Elements: " + pdu.getVariables().size());
Run Code Online (Sandbox Code Playgroud)
它按预期返回13.
有谁知道如何让这个工作?
编辑
根据要求,我将在断点处添加运行的代码行,
logger.error("I am Here! " + "#PDU Elements: " + pdu.getVariables().size());
Trap trap = Trap.createTrapFrom(variableMap, instanceIdentificationNumber); // Breakpoint in margin on this line.
Run Code Online (Sandbox Code Playgroud)
编辑2
问题似乎与IDEA随机错过一些断点有关.我也尝试了一些无条件断点(应该总是停止),这些断点只在特定时间停止.
我想知道是否有一些方法来使用枚举初始化向量.枚举是必要的,因为我正在创建一个对象的矢量(相同的类,Chess_piece,但不同的类型).我希望能够在没有大量测试的情况下访问该元素(if (this is white pawn 8)...).枚举可用于以漂亮的方式逐项列出vec(W_PAWN8)....无论如何,当我创建矢量时,我会做这样的事情(伪代码)
//generate enum of pieces
enum pieceList{
...
} pieceEnum;
vector<int> pieceIter = {W_PAWN1,W_PAWN2,...}; //equal to {1,2,...}
//board index goes from lower left to upper right
vector<int> boardIdx = {8,9,10,11,12,13,14,15,16,1...};
vector<Piece*> pieceVec;
for (int i=0; i<32; i++)
pieceVec.pushback( new Piece( boardIdx(i), pieceIter(i) ) );
Run Code Online (Sandbox Code Playgroud)
但是,现在我实际上写了两次相同的东西.当我创建枚举和pieceIter.对于这个程序,我可以忍受它,但我可能不止一次有同样的问题.
这就是我想知道它存在vector<int> pieceIter {pieceEnum};于c ++中的原因吗?上一句中的代码片段当然是无效的,但我认为它提示我的问题,使用枚举中的所有变量并以简单的方式初始化向量?
如果没有,是否可以在matlabl中使用某种"范围初始化",例如:
vector<int> vec {1:32};
Run Code Online (Sandbox Code Playgroud)
但是用c ++语法?
我一直在寻找一种从matlab中删除一堆路径的简单方法.我正在使用一个相当大的程序,它在其目录中包含许多路径.我也使用svn版本处理,我使用了许多分支,它们通常包含一些相同的功能,一些被修改,一些只存在于一个分支上.
问题是,当我为一个分支设置路径(使用自定义函数),然后想要将目录更改为另一个路径时,第一部分很烦人删除.我用过
rmpath(path1,path2,...);
Run Code Online (Sandbox Code Playgroud)
但是,这需要手动键入每个路径.因为我想知道所有路径都有一个共同的基本目录,无论如何使用通配符从路径中删除整个目录?我用的是Windows机器.
您想知道在matlab中重复出现的java错误.它通常发生在matlab使用java做一些繁重的事情时.例如,这可以是按住ctrl + z或ctrl + y.
在复制之前我错误地删除了错误消息,但我认为我可以通过任何方式传递问题的核心.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
...
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会出现这种错误?我从matlab r2007中找到了一些关于这个的信息,这是因为java swing是线程不安全的,并且matlab缺乏支持来确保线程安全.但是,这应该在matlab r2008b中修复.那我为什么现在就拿到它呢?
编辑 这是完整的堆栈跟踪:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.netbeans.editor.BaseDocument.notifyUnmodify(BaseDocument.java:1465)
at org.netbeans.editor.BaseDocument.notifyModifyCheckEnd(BaseDocument.java:816)
at org.netbeans.editor.BaseDocumentEvent.redo(BaseDocumentEvent.java:336)
at javax.swing.undo.UndoManager.redoTo(Unknown Source)
at javax.swing.undo.UndoManager.redo(Unknown Source)
at com.mathworks.mwswing.undo.MUndoManager.redo(MUndoManager.java:255)
at org.netbeans.editor.ActionFactory$RedoAction.actionPerformed(ActionFactory.java:767)
at org.netbeans.editor.BaseAction.actionPerformed(BaseAction.java:259)
at javax.swing.SwingUtilities.notifyAction(Unknown Source)
at javax.swing.JComponent.processKeyBinding(Unknown Source)
at javax.swing.JComponent.processKeyBindings(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at com.mathworks.widgets.SyntaxTextPaneBase.processKeyEvent(SyntaxTextPaneBase.java:1187)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) 我一直在寻找一种监控matlab内存消耗的方法,但一直无法做到.我感兴趣的是内置函数的峰值内存,并且无法使用matlab分析器进行测量,因为这些函数已经编译完毕.
在matlab中很少记录峰值内存问题,这意味着要找出问题所在,我需要自己监视内存使用情况.我已经尝试在Windows中使用资源管理器,但我找不到任何问题.我可能认为没有问题,但也可能意味着采样率很低.我用的是Windows 7.
这个问题可能与matlab无关,但由于我在matlab中遇到问题,我会将其标记出来.
我有一个关于Java Swing和JPanel的问题.我可以说我是一个没有经验的Java程序员,但对编程并不是全新的.
我的问题是我有一个叫做的课RandomParticle,
public class RandomParticle extends Ellipse2D.Double {
private Ellipse2D.Double circle;
public RandomParticle(double xPos , double yPos,double rad) {
setCircle(new Ellipse2D.Double(xPos, yPos, rad, rad));
}
public Ellipse2D.Double getCircle() {
return circle;
}
public void setCircle(Ellipse2D.Double circle) {
this.circle = circle;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在屏幕上移动(当然是在JFrame中).粒子是一个默认对象,只是为了获取图形.然而,在许多地方,例如在这里,可以说,为了能够绘制圆圈,它必须覆盖paintComponentJPanel中的方法.确实合理的是,要在JFrame中绘制内容,它必须是JPanel.但是,这可能会导致麻烦,因为Java不支持多重继承.
在这种情况下,我真的不需要RandomParticle成为ellipse2D的孩子,但随着我的类变得越来越复杂,我很可能需要在某些时候从其他类中固有.但是,我觉得这个级别的问题对于SO来说是一个很好的部门,因为它不需要我的程序的任何具体知识.所以我想知道的是:是否有可能在没有班级成为JPanel的孩子的情况下画一个圆圈?
我已经解决了列出一组项目的问题,这些项目具有组件,而这些组件又具有 awk 中的属性。
我试图以两种方式解决这个问题。
1) 定义一个数组list[item-number,component-number][properties].
2) 定义一个数组list[item-number][component-number][properties].
这在很多方面都很有趣,因为我注意到 (2) 保持插入顺序,而 (1) 没有。我知道数组在 awk 中是关联的,这很可能是巧合。但是,由于插入顺序在我的情况下很重要(而且,我想了解更多关于 awk 的信息),我想知道这是否会发生以及为什么会发生。
有任何想法吗?BR 帕特里克
我正在使用 Maven 编译器插件 3.0,但出现错误“此处不允许使用 Element compilerArgs”。这似乎适用于命令行,但我在 IDE 中收到此错误。我使用 IDEA 2017.2 社区版。某处可能缺少一些架构,但我不确定。有没有人有解决此类问题的好方法,即不向 JetBrains 发送错误报告并等待修复?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<fork>true</fork>
<compilerArgs>
<arg>-DspecificArg</arg>
</compilerArgs>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud) 由于 awk 似乎没有回调,我打算为此使用 eval 语句。所以我查看了 GNU 用户指南,
https://www.gnu.org/software/gawk/manual/html_node/Viewing-And-Changing-Data.html
然后写了这个简单的脚本。
BEGIN {
args[1]="\"a\""
args[2]="\"b\""
args[3]="\"c\""
args[4]="\"\""
run_callback("printargs",args)
print args[4]
}
function run_callback(callback,args)
{
nargs=length(args)
if (nargs>0)
{
argstring=args[1]
for (argn=2;argn<=nargs;argn++)
{
argstring=argstring","args[argn]
}
}
callbackstr = callback"("argstring")"
print callbackstr
eval callbackstr
}
function printargs(arg1,arg2,arg3,res)
{
res=arg1","arg2","arg3
print "res="res
}
Run Code Online (Sandbox Code Playgroud)
但是,打印输出不是我所期望的。我明白了,
[~]-> gawk -f callback.awk
printargs(a,b,c,"")
""
Run Code Online (Sandbox Code Playgroud)
而不是预期的,
[~]-> gawk -f callback.awk
printargs(a,b,c,"")
res=a,b,c
"Not sure what is supposed to be here, but it is not relevant."
Run Code Online (Sandbox Code Playgroud)
感觉好像在 eval 语句中没有实际发生任何事情。有谁知道这里发生了什么?
gawk 版本是 …