通过从彼此中减去两个日期时间对象,我遇到了一些问题.我使用以下代码:
$today = DateTime->now( time_zone => 'Europe/Berlin' );
my $dt1 = DateTime-> new (
year => 2011,
month => 08,
day => 08,
hour => 1,
minute => 0,
second => 4,
time_zone =>'Europe/Berlin'
);
print "DT1 : $dt1\n";
print "today: $today\n";
my $sub = $today->subtract_datetime($dt1);
print "sub days: ".$sub->days."\n";
Run Code Online (Sandbox Code Playgroud)
DT1的打印声明今天打印:
DT1 : 2011-08-08T01:00:04
today: 2011-08-16T08:34:10
Run Code Online (Sandbox Code Playgroud)
但是如果我在减法后打印$sub->days它显示1而不是8天的值.
我的减法中有错误吗?
非常感谢您的帮助.
这是Java中的一个小故障吗?
我去解决这个问题:3.1 - 7.1
我得到答案:-3.9999999999999996
这里发生了什么?
基本上,当使用减法溢出整数时,您获得的行为,但对于给定的位数.显而易见的方法,假设有符号整数:
template <int BITS>
int sub_wrap(int v, int s) {
int max = (1<<(BITS));
v -= s;
if (v < -max) v += max*2;
// or if branching is bad, something like:
// v += (max*2) * (v < -max)
return v;
}
// For example subtracting 24 from -16 with 5 bit wrap,
// with a range of -32, 31
sub_wrap<5>(-16, 28); -> 20
Run Code Online (Sandbox Code Playgroud)
有没有一种巧妙的做法,不那么丑陋,最好比上面的更快?
更新:对于混乱感到抱歉.我不假思索地包括使用除了叹息位之外的位数的令人困惑的表示法.所以在上面,用6位替换5位以获得更多的理智.
使用数字9,8,7,6,5和4,找到以下内容:
a)最大可能的总和
是否有更多的解决方案可以提供最大可能的总和?你怎么知道它是最大可能的总和?
b)尽可能小(正)的差异
有多个解决方案吗?你怎么知道这是最小的差异?
数字必须是3位数.例如,965 + 784或879 - 654
我需要从ushort arrayB中具有相同长度的相应索引值中快速减去ushort arrayA中的每个值.
另外,如果差异为负,我需要存储零,而不是负差.
(确切地说,长度= 327680,因为我从另一个相同大小的图像中减去640x512图像).
下面的代码目前需要大约20ms,如果可能的话,我想在~5ms内将其降低.不安全的代码是可以的,但请提供一个例子,因为我不擅长编写不安全的代码.
谢谢!
public ushort[] Buffer { get; set; }
public void SubtractBackgroundFromBuffer(ushort[] backgroundBuffer)
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
int bufferLength = Buffer.Length;
for (int index = 0; index < bufferLength; index++)
{
int difference = Buffer[index] - backgroundBuffer[index];
if (difference >= 0)
Buffer[index] = (ushort)difference;
else
Buffer[index] = 0;
}
Debug.WriteLine("SubtractBackgroundFromBuffer(ms): " + sw.Elapsed.TotalMilliseconds.ToString("N2"));
}
Run Code Online (Sandbox Code Playgroud)
更新:虽然它不是严格意义上的C#,为了其他人的利益,我终于最终使用以下代码将C++ CLR类库添加到我的解决方案中.它运行在~3.1ms.如果使用非托管C++库,则运行时间约为2.2毫秒.由于时差很小,我决定使用托管库.
// SpeedCode.h
#pragma once
using namespace System;
namespace SpeedCode
{
public ref class SpeedClass …Run Code Online (Sandbox Code Playgroud) 例如...
$aa = 10694994.89;
$bb = 10696193.86;
$ab = $aa - $bb;
// result is:-1198.9699999988 not the -1198,97
Run Code Online (Sandbox Code Playgroud)
但在此示例中:
$cc = 0.89;
$dd = 0.86;
$cd = $cc - $dd;
//Result is: 0.03
Run Code Online (Sandbox Code Playgroud)
为什么与示例有所不同?缺乏精度?
在我的程序中,我正在计算两个数字,我想确保它们的减法等于1.
这是代码:
var firstCount=element.all(by.repeater('app in userApps')).count();
var secondCount=element.all(by.repeater('app in userApps')).count();
Run Code Online (Sandbox Code Playgroud)
到目前为止它很好 - 我得到的数字.接下来的问题是:
var sub=secondCount-firstCount;
expect(sub).toEqual(1);
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
Expected NaN to equal 1.
Run Code Online (Sandbox Code Playgroud)
任何的想法?
我遇到了一个问题,当从一个浮点数中减去一个数组时,python会自动舍入非常小的数字(小于1e-8).举个例子:
import numpy as np
float(1) - np.array([1e-10, 1e-5])
Run Code Online (Sandbox Code Playgroud)
关于如何强迫python不要圆的任何想法?这迫使我在某些情况下除以零,并成为一个问题.从numpy数组中减去时会出现同样的问题.
我想从x中减去y,这意味着从x中删除一个“A”,三个“B”和一个“E”,所以xNew将是c("A", "C", "A","B","D")。这也意味着
length(xNew)=length(x) - length(y)
x <- c("A","A","C","A","B","B","B","B","D","E")
y <- c("A","B","B","B","E")
Run Code Online (Sandbox Code Playgroud)
setdiff 不起作用,因为
xNew <- setdiff(x,y)
xNew
[1] "C" "D"
Run Code Online (Sandbox Code Playgroud)
匹配也不起作用
xNew <- x[-match(y,x)]
xNew
[1] "A" "C" "A" "B" "B" "B" "D"
Run Code Online (Sandbox Code Playgroud)
它删除了第五个位置上的“B”3次,所以还剩下三个“B”。
有谁知道如何做到这一点,R 中是否有可用的函数或者我们应该编写一个私有函数?预先非常感谢。
我有一个很大的 shapefile,其中包含 1000 个多个重叠的多边形。我正在尝试将这些多个重叠多边形之外的组合区域与图层中的任何多边形不重叠。这些实际上是多次发生火灾的区域,我正在寻找仅发生过一次火灾的区域。
我被困在如何找到外部没有任何重叠的区域上。你能帮我吗?
这是一个可重现的示例。
#make some overlapping polygons
m = rbind(c(0,0), c(1,0), c(1,1), c(0,1), c(0,0))
p = st_polygon(list(m))
n = 100
l = vector("list", n)
for (i in 1:n)
l[[i]] = p + 2 * runif(2)
s = st_sfc(l)
#select just a few of these
s5 <- s[1:5]
#now try to step through and get the non-overlapping areas
counter <- 0
sall.out <- list()
for (i in 1:length(s5)) {
print(i)
s5.sel <- s5[i]
s5.out <- s5[!(s5 == s5.sel)] …Run Code Online (Sandbox Code Playgroud)