これくらいは大丈夫かな、と思っていたことが、大丈夫じゃないことがある。
01: #include02: #include 03: 04: int main(int argc, char *argv[]) 05: { 06: uint64_t val = 0.006 * 100000000; 07: printf("%llu\n", (unsigned long long)val); 08: }
600000
よし。
01: #include02: #include 03: 04: int main(int argc, char *argv[]) 05: { 06: uint64_t val = 0.007 * 100000000; 07: printf("%llu\n", (unsigned long long)val); 08: }
700000
よし。
01: #include02: #include 03: 04: int main(int argc, char *argv[]) 05: { 06: uint64_t val = 0.008 * 100000000; 07: printf("%llu\n", (unsigned long long)val); 08: }
800000
よし。
01: #include02: #include 03: 04: int main(int argc, char *argv[]) 05: { 06: uint64_t val = 0.009 * 100000000; 07: printf("%llu\n", (unsigned long long)val); 08: }
899999
あー、だめかー。
いやあ、コンパイルの段階で解決するものは、このくらいは大丈夫だろうと思っていたのだ。
01: #include02: #include 03: 04: int main(int argc, char *argv[]) 05: { 06: uint64_t val = 0.009 * 100000000 + 0.5; 07: printf("%llu\n", (unsigned long long)val); 08: }
900000
これでいいや。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。