看起来单声道实现MemoryBarrier在ReaderWriterLockSlim方法内没有调用.因此,当我在a中进行任何更改时write lock,我可以在另一个使用a的线程中接收旧的缓存值read lock.
真的有可能吗?我应该MemoryBarrier在代码内部读取和写入锁定之前和之后插入?
我已经使用了两个例子(也来自这个网站),但结果与Unity说的结果不一样.
Quaternion.Euler和.eulerAngles是Unity函数.FromQ不执行奇点检查,FromQ2确实如此.
结果:
eulers = (100,55,-11):
Quaternion.Euler(eulers) == (0.6, 0.4, -0.4, 0.5)
ToQ(eulers)); == (0.5, -0.4, 0.2, 0.7) // 0.5, -0.4 right but in wrong order
FromQ(ToQ(eulers)) == (55.0, 100.0, -11.0)
FromQ2(ToQ(eulers)) == (-55.5, -6.3, 71.0) // something right
Quaternion.Euler(eulers).eulerAngles == (80.0, 235.0, 169.0)
FromQ2(Quaternion.Euler(eulers)) == (65.8, 1.9, 99.8)
ToQ(eulers).eulerAngles == (70.0, 286.9, 341.4)
FromQ(Quaternion.Euler(eulers)) == (-65.8, 76.0, 4.6)
It must be:
FromQ() = FromQ2() = .eulerAngles,
ToQ() = Quaternion.Euler()
Run Code Online (Sandbox Code Playgroud)
代码在这里:http://pastebin.ru/eAlTHdYf
任何人都可以更正此代码?我需要的代码将返回与Unity函数返回的值相同的值.
这是固定代码:http://pastebin.com/riRLRvch …
我需要提取吗?
bool xIsNull = x == null
Run Code Online (Sandbox Code Playgroud)
从我检查的循环x == null?
据我所知if (a == true),if (x == null)两者都使用相同的IL指令.但是指针由32位或64位组成.CLR应该检查每一位与null进行比较吗?
更新
快速测试显示没有区别,但我仍然希望有人解释这一点.
UPDATE2
我使用IL发射,所以我不能指望编译器优化我的代码.只有JIT.
我有一个四元数形式的旋转r1的3D对象.我用当地的欧拉角旋转它:
transform.Rotate(new Vector3(0f, 15f, 0f), relativeTo: Space.Self); // right
transform.Rotate(new Vector3(-10f, -5f, 0f), relativeTo: Space.Self); // left up
transform.Rotate(new Vector3(0f, 0f, 90f), relativeTo: Space.Self); // 90 clockwise
Run Code Online (Sandbox Code Playgroud)
现在我有旋转r2.如果我不知道应用了哪些角度,如何检索局部Y旋转和15-5 + 0 = 10?可能无法获得完全相同的价值(10),但你已经有了我的想法.也许我可以在当地的r2空间获得Y diff ?
我有这个代码:
tmp = (uint)len;
writer.CurPosition = value + 1;
do
{
value++;
writer.dest.WriteByte((byte)((tmp & 0x7F) | 0x80));
} while ((tmp >>= 7) != 0);
Run Code Online (Sandbox Code Playgroud)
但我不明白是怎么tmp >>= 7运作的?
这总是会在所有平台上以相同的顺序打印元素吗?
foreach (var el in multidimArray) Console.WriteLine(el);
Run Code Online (Sandbox Code Playgroud)
我正在寻找规格或任何官方报价.
所以特征对象不能有泛型方法——看起来不错。但在这种语言中,使用抽象机制的唯一方法是通过泛型和特征对象。这意味着对于每个特征,我必须事先决定它是否可以用作对象,并在各处使用 dyn 而不是 impl。并且它内部的所有特征都必须以相同的方式来支持这一点。这种感觉非常难看。你能提出什么建议或者告诉我为什么这样设计吗?
fn main() {}
// some abstracted thing
trait Required {
fn f(&mut self, simple: i32);
}
// this trait doesn't know that it's going to be used by DynTrait
// it just takes Required as an argument
// nothing special
trait UsedByDyn {
// this generic method doesn't allow this trait to be dyn itself
// no dyn here: we don't know about DynTrait in this scope
fn f(&mut self, another: impl Required);
}
// this …Run Code Online (Sandbox Code Playgroud) 我有一个Array未知的维度。例如,它可能是object[]、object[,]、object[,,,]。
我想按顺序填充它(例如 [2,2] 这个顺序:0,0; 0,1, 1,0; 1,1):
Array arr = ... // input array
for (int i = 0; i < arr.Length; i++)
{
arr.SetValue(stream.ReadNextObject(), ???); // convert i -> int[] indexes
}
Run Code Online (Sandbox Code Playgroud)
我知道i可以使用%运算符进行对话,但很难想象多维的精确算法。二维只有一个答案:将一维数组的索引转换为二维数组即行和列
我可以用来Stack<int>在遍历数组时存储索引,但似乎这样%会更有效率(我真的需要在这里关心性能)。但我不确定Stack<T>vs %。
c# ×7
euler-angles ×2
math ×2
performance ×2
abstraction ×1
algorithm ×1
arrays ×1
asynchronous ×1
generics ×1
quaternions ×1
rust ×1
traits ×1