在Java 7中,string
对象可以是switch
语句的表达式.有人可以从官方文档中解释以下声明吗?
Java编译器通常使用String对象生成比使用链式if-then-else语句更高效的字节码.
升级到Windows 10后,MarkdownPad 2不再起作用.预览窗口在启动时因"Awesomium"错误而崩溃.
在一周前提交错误报告后,我没有看到任何新的活动.我确实看到了一些关于安装Awesomium SDK的评论,并尝试了这条路线,但这会安装2个额外的程序(需要单独的管理/卸载),所以我不喜欢这个选项.
有没有人设法让MarkdownPad在Windows 10上运行,如果是这样,怎么样?
我有一个庞大的结构,其中整个内容是标量变量,枚举和标量数组(基于堆栈),但一个std :: string变量除外.
现在,这是我的问题......
我可以将结构的整体大小设置为0(就像我只是所有标量一样),或者std :: string在那里是不可能的?我不确定memset会对其内部表示做什么.
如果你要说它的好/坏请解释原因 - 我想知道为什么它是这样的:)
我在Delphi中编写一个简单的BigInteger类型.它主要由TLimb的动态数组组成,其中TLimb是32位无符号整数,32位大小字段,它还保存BigInteger的符号位.
要添加两个BigIntegers,我创建一个适当大小的新BigInteger然后,在一些簿记之后,调用以下过程,将三个指针传递给左右操作数和结果的数组的相应开始,以及左右肢的数量分别为.
普通代码:
class procedure BigInteger.PlainAdd(Left, Right, Result: PLimb; LSize, RSize: Integer);
asm
// EAX = Left, EDX = Right, ECX = Result
PUSH ESI
PUSH EDI
PUSH EBX
MOV ESI,EAX // Left
MOV EDI,EDX // Right
MOV EBX,ECX // Result
MOV ECX,RSize // Number of limbs at Left
MOV EDX,LSize // Number of limbs at Right
CMP EDX,ECX
JAE @SkipSwap
XCHG ECX,EDX // Left and LSize should be largest
XCHG ESI,EDI // so swap
@SkipSwap:
SUB EDX,ECX // …
Run Code Online (Sandbox Code Playgroud) 执行此浮点计算时boost::thread
,它会产生与std::thread
在主线程中或主线程中执行时不同的结果.
void print_number()
{
double a = 5.66;
double b = 0.0000001;
double c = 500.4444;
double d = 0.13423;
double v = std::sin(d) * std::exp(0.4 * a + b) / std::pow(c, 2.3);
printf("%llX\n%0.25f\n", *reinterpret_cast<unsigned long long*>(&v), v);
}
Run Code Online (Sandbox Code Playgroud)
这似乎是因为boost::thread
默认情况下使用53位内部精度进行浮点数学运算,而主线程使用的是64位精度.如果在创建_fpreset()
后重置FPU单元的状态boost::thread
,则结果与主线程中的结果相同.
我正在使用Embarcadero C++ Builder 10.1(编译器bcc32c版本3.3.1)和Boost 1.55.0.我的环境是Windows 7,我正在构建32位Windows目标.
#include <tchar.h>
#include <thread>
#include <boost/thread.hpp>
#include <cstdio>
#include <cmath>
#include <cfloat>
namespace boost { void tss_cleanup_implemented() {} }
void print_number()
{
double …
Run Code Online (Sandbox Code Playgroud) 对于我的BigIntegers,在PUREPASCAL实现中(即不允许汇编程序),我必须乘以2 UInt32
才能得到UInt64
结果.
通常的方法是扩展至少一个操作数,所以你得到一个64位乘法:
Res := UInt64(A) * B;
Run Code Online (Sandbox Code Playgroud)
这里Res
是UInt64
和A
和B
的UInt32
.
但是,在Win32中,这会产生一个相当笨重的机器代码:
MulTest.dpr.431: Res := UInt64(A) * B;
004DB463 8B45F8 mov eax,[ebp-$08] // load A
004DB466 33D2 xor edx,edx // make it UInt64
004DB468 52 push edx // push A
004DB469 50 push eax
004DB46A 8B45FC mov eax,[ebp-$04] // load B
004DB46D 33D2 xor edx,edx // make it UInt64
004DB46F E87C0AF3FF call @_llmul // 64 bit multiplication
004DB474 8945E8 …
Run Code Online (Sandbox Code Playgroud) 为什么这段代码不会崩溃?T
没有.它是如何可以访问Caption
是否T
是nil
?
procedure Crash;
VAR T: TButton;
begin
T:= NIL;
T.Caption:= ''; <---------- this works
end;
Run Code Online (Sandbox Code Playgroud) float fv = orginal_value; // original_value may be any float value
...
double dv = (double)fv;
...
fv = (float)dv;
Run Code Online (Sandbox Code Playgroud)
应该fv完全等于original_value吗?任何精度都可能丢失?
我是delphi XE8的新手.我有以下代码来自我的delphi版本6,我想在delphi XE8中运行它.
1. function UTF8ToStringLen(const src: PChar; const Len: Cardinal): widestring;
2. var
3. l: Integer;
4. begin
5. SetLength(Result, Len);
6. if Len > 0 then
7. begin
8. l := MultiByteToWideChar( CP_UTF8, 0, src, Len, PWChar(Result), Len*SizeOf(WideChar)); <--error
9. SetLength(Result, l);
10. end;
11. end;
12.
13.
14. function StringToUTF8Len(const src: PChar; const Len: Cardinal): string;
15. var
16. bsiz: Integer;
17. Temp: string;
18. begin
19. bsiz := Len * 3;
20. SetLength(Temp, bsiz);
21. if …
Run Code Online (Sandbox Code Playgroud) 我在Delphi中编写一个简单的BigInteger类型.此类型由无符号32位整数数组(我称之为四肢),计数(或大小)和符号位组成.数组中的值被解释为绝对值,因此这是符号幅度表示.这有几个优点,但有一个缺点.
像位运算and
,or
,xor
并not
有补语义.如果两个BigInteger
s都具有正值,则这是没有问题的,但是负BigInteger
s 的大小必须通过否定转换为二的补码.这可能是一个性能问题,因为如果我们这样做,比方说
C := -A and -B;
Run Code Online (Sandbox Code Playgroud)
然后我必须否定的大小A
和B
在之前and
就可以执行操作.由于结果也应该是否定的,我必须否定结果,以便再次获得正数.对于较大的BigInteger
s,否定最多三个值可能是相当大的性能成本.
请注意,我知道如何做到这一点并且结果是正确的,但我想避免由大数组的必要否定引起的缓慢.
例如,我知道一些快捷方式
C := not A;
Run Code Online (Sandbox Code Playgroud)
可以通过计算来实现
C := -1 - A;
Run Code Online (Sandbox Code Playgroud)
这就是我做的,结果很好.这使得not
性能与加法或减法相同,因为它避免了操作之前(和之后)的否定.
我的问题是:是否有类似的法律我可以用来避免否定"负面" BigInteger
的大小?我的意思是not
通过使用减法来计算?
我的意思是简单或不那么简单的法律
not A and not B = not (A or B) // = is Pascal for ==
not A or not B = not (A and B)
Run Code Online (Sandbox Code Playgroud)
但后来为-A和/或-B等我知道
(-A and …
Run Code Online (Sandbox Code Playgroud) delphi ×5
c++ ×3
assembly ×1
boost-thread ×1
c ×1
c++builder ×1
delphi-xe7 ×1
delphi-xe8 ×1
if-statement ×1
java ×1
java-7 ×1
markdown ×1
x86 ×1