Index / Reload
おっしゃる通り 10 で割る計算に素直に div 命令を使ってくれるコンパイラは少なく、itoa1 や itoa2 でも 3435973837 (0xCCCCCCCD)、-3689348814741910323 (0xCCCCCCCCCCCCCCCD) を使った近似をされていました。また itoa3 の value * 52429 も i386 と SPARC では定数乗算の展開をされて、 tmp = value << 4 - value << 2; ret = tmp << 24 + tmp << 16 + tmp << 8 + tmp + value;のように展開されています。SPARC はいいのですが、Pentium4 だと逆効果のような…
乗算が速くないとか、あるいはコンパイラ内部で除算を乗算に変換してるとかは考えられませんか?
おっしゃる通り 10 で割る計算に素直に div 命令を使ってくれるコンパイラは少なく、
itoa1 や itoa2 でも 3435973837 (0xCCCCCCCD)、-3689348814741910323 (0xCCCCCCCCCCCCCCCD) を使った近似をされていました。
また itoa3 の value * 52429 も i386 と SPARC では定数乗算の展開をされて、
tmp = value << 4 - value << 2;
ret = tmp << 24 + tmp << 16 + tmp << 8 + tmp + value;
のように展開されています。SPARC はいいのですが、Pentium4 だと逆効果のような…
乗算が速くないとか、あるいはコンパイラ内部で除算を乗算に変換してるとかは考えられませんか?