我想出来了
n=1;
curAvg = 0;
loop{
curAvg = curAvg + (newNum - curAvg)/n;
n++;
}
Run Code Online (Sandbox Code Playgroud)
我认为这种方式的亮点是:
- 它避免了大数字(如果你总和然后除以可能溢出)
- 你保存一个寄存器(不需要存储总和)
问题可能在于求和误差 - 但我认为通常会有平衡的向上和向下舍入数,因此误差不会大大加总.
你看到这个解决方案有任何陷阱吗?你有更好的建议吗?
众所周知,String.format()的性能很糟糕.我看到我的(可能很常见的)典型案例有很大的改进.我多次打印相同的数据结构.让我们想象一下像"x:%dy:%dz:%d"这样的结构.我希望String.format()的主要问题是它必须始终解析格式化字符串.我的问题是:是否有一些现成的类允许只读取一次格式化字符串然后允许在变量参数填充时快速给出字符串?用法应如下所示:
PreString ps = new PreString("x:%d y:%d z:%d");
String s;
for(int i=0;i<1000;i++){
s = ps.format(i,i,i);
}
Run Code Online (Sandbox Code Playgroud)
我知道这是可能的 - 以下是我的快速和肮脏的例子,它正在我正在谈论的事情,并且在我的机器上快约10倍:
public interface myPrintable{
boolean isConst();
String prn(Object o);
String prn();
}
public class MyPrnStr implements myPrintable{
String s;
public MyPrnStr(String s){this.s =s;}
@Override public boolean isConst() { return true; }
@Override public String prn(Object o) { return s; }
@Override public String prn() { return s; }
}
public class MyPrnInt implements myPrintable{
public MyPrnInt(){}
@Override public boolean isConst() …
Run Code Online (Sandbox Code Playgroud) 我找到了一个很好的答案,如何在bash脚本中评论(由@ sunny256):
Run Code Online (Sandbox Code Playgroud)#!/bin/bash echo before comment : <<'END' bla bla blurfl END echo after comment
在
'
和'
周围的END
分隔符是重要的,否则里面的东西例如像块$(command)
将被解析并执行.
这可能很难看,但它有效,我很想知道这意味着什么.有人可以解释一下吗?我确实找到了一个解释:
,它是无操作或真实的.但是无论如何我打电话给无操作或真实都没有意义....
我可以设置一些IntelliJ构建过程来预处理Java源代码并给我增加内部版本号吗?就像是:
int myBuildNumber = INTELLI_J_IDEA_MAGIC_WHICH_WILL_INCREMENT_EVERY_BUILD;
Run Code Online (Sandbox Code Playgroud) 我将把C代码改写成Java.原始C代码的核心是一个HW包装器.在C中,我们为每个HW寄存器使用了大量的联合,例如:
typedef union RegIntStatus
{
u8 reg;
struct
{
u8 bit0_abc:1;
u8 bit1_cde:1;
u8 bit2_xyz:1;
u8 bit3_7_rsvd:5;
} bits;
} regABC;
Run Code Online (Sandbox Code Playgroud)
然后我们用它就像
regABC r;
r.reg=0
r.bits.bit0_abc=1;
call(r.reg)
Run Code Online (Sandbox Code Playgroud)
想象那里有很多寄存器.让我们说40.如何将它实现到没有40个类文件的java中?我在考虑创建一个类
univerasl_reg<T> { // where T will be some "enum"
public byte b;
public byte set(T bit_mask,bool val) {
// here is compile error it does not know variable bit_mask.v
if(val) {b |= bit_mask.v}
else b &= bit_mask.v ^ 0xFF;
}
}
Run Code Online (Sandbox Code Playgroud)
然后一个文件可以包含多个枚举,如:
public static enum RegTst{
b1_abc(0x01),
b2_xyz(0x02),
b3_klm(0x04);
public byte v; …
Run Code Online (Sandbox Code Playgroud) 如何以科学记数法最好地打印2个浮点数但具有相同的指数?例如:我想打印这样的数字:
1.234e-6
11.234e-6
Run Code Online (Sandbox Code Playgroud)
我想要一些功能来自动检测最佳指数 - 较小的数字始终从第一个十进制数字开始,较大的数字打印它必须具有相同的指数.例如:0.1和100将打印
1.000e-1
1000.000e-1
Run Code Online (Sandbox Code Playgroud)
但即使我明确要求String.format("%2.3e",11.234e-6)
我得到2个小数位 1.123e-5
我发现当我按回车键时,腻子会发送到我的串行设备 \r。有没有办法让腻子发送\n?
我发现可以按 CTRL+J 发送 \n - 但我只想按 Enter。
有人建议设置终端->“每个 LF 中的隐式 CR”。但这对我不起作用(我认为这是因为腻子收到而不发送)。
(我正在使用腻子版本 0.66)
我正在尝试编写BLE Android应用程序.我发现有时当我调用 BluetoothGatt.writeDescriptor()时它会返回false.
我没有在文档中找到任何关于此功能的限制说明.但是堆栈溢出的ppl说我需要等待BluetoothGattCallback.onDescriptorWrite()才能尝试编写另一个描述符.
这是一个回复说BLE忙于 writeDescriptor()而不能做其他写操作.
这是另一个线程说你不能再调用writeCharacteristic()两次.
我的问题是
writeDescriptor()
我知道writeDescriptor()
在收到之前我不能第二次打电话onDescriptorWrite()
.但是,onDescriptorWrite()
当我想打电话时,我必须等待writeCharacteristic()
吗?readCharacteristic()
,readDescriptor()
,requestMtu()
...)?BluetoothGattServer.notifyCharacteristicChanged()
我时,我等待BluetoothGattServerCallback.onNotificationSent
才能打电话BluetoothGatt.writeDescriptor()
或BluetoothGatt.writeCharacteristic()
?(BTW对谷歌文档的称赞onNotificationSent()
是通过运气记录得当.Doc说:当要发送多个通知时,应用程序必须等待收到此回调才能发送其他通知.
onNotificationSent()
arleady正确记录的那样.他们只需要将这句话复制到其他功能.我正在写一个复杂的宏,我还需要传递数组初始化器.基本上我有困难:
#define INIT_ARR(VAR_NAME,ARR_DATA) int VAR_NAME[] = ARR_DATA
Run Code Online (Sandbox Code Playgroud)
那我就叫它
INIT_ARR(myNm,{1,2,3});
Run Code Online (Sandbox Code Playgroud)
但预处理器将任何逗号(也是花括号内的逗号)解释为新的宏参数,因此它给出了错误:
error: #55-D: too many arguments in invocation of macro "INIT_ARR"
Run Code Online (Sandbox Code Playgroud)
预处理器不会忽略()所以我可以这样做:
#define INIT_ARR(VAR_NAME,ARR_DATA) int VAR_NAME[] = {ARR_DATA}
INIT_ARR(myNm,(1,2,3));
Run Code Online (Sandbox Code Playgroud)
但后来它被解释为
int myNm[] = {(1,2,3)};
Run Code Online (Sandbox Code Playgroud)
哪个不适合C.
有办法怎么做?例如从参数中删除大括号?
已经存在一个问题,线程是否可以同时安全地读取/迭代 LinkeList。似乎答案是肯定的,只要没有人从链表中对其进行结构性更改(添加/删除)。
虽然一个答案是警告“未刷新的缓存”并建议了解“java内存模型”。所以我要求详细说明那些“邪恶”的缓存。我是新手,到目前为止我仍然天真地相信以下代码是可以的(至少从我的测试来看)
public static class workerThread implements Runnable {
LinkedList<Integer> ll_only_for_read;
PrintWriter writer;
public workerThread(LinkedList<Integer> ll,int id2) throws Exception {
ll_only_for_read = ll;
writer = new PrintWriter("file."+id2, "UTF-8");
}
@Override
public void run() {
for(Integer i : ll_only_for_read) writer.println(" ll:"+i);
writer.close();
}
}
public static void main(String args[]) throws Exception{
LinkedList<Integer> ll = new LinkedList<Integer>();
for(int i=0;i<1e3;i++) ll.add(i);
// do I need to call something special here? (in order to say:
// "hey LinkeList flush all your …
Run Code Online (Sandbox Code Playgroud) 我从通道获取的数据不知道UTF-8规则.因此,有时当UTF-8使用多个字节来编码一个字符时,我尝试将部分接收的数据转换为文本,我在转换过程中遇到错误.根据接口的性质(没有任何结束的流)我无法找出数据何时已满.因此,我需要处理部分utf-8解码.基本上我需要解码我可以存储的部分数据.存储的部分数据将作为前缀添加到下一个数据.我的问题是如果在python中有一些简洁的功能允许它吗?
[编辑]只是为了确保您了解docs.python中的功能
bytes.decode(encoding="utf-8", errors="ignore")
Run Code Online (Sandbox Code Playgroud)
但问题是它不会返回我的错误在哪里,所以我不知道从最后我将保留多少字节.