ページ 1 / 1
nsecをsecへ変換する方法
Posted: 2014年6月19日(木) 14:42
by jun039
いつも利用させて頂いております。
早速ですが、、、、nsecをsecへ変換する場合に、どちらがいいのかを
相談したいと思います。
A : sec = nsec * 0.000000001
B : sec = nsec / 1000000000
結果としては、どちらでも同じ結果になると思うのですが、
皆様が使うとしたら、どちらの方法で行いますか?
または、他の手段を使われる方もいるのでしょうか??
できれば理由とともに教えていただけると助かります。
申し訳ありませんが、よろしくお願いします。
Re: nsecをsecへ変換する方法
Posted: 2014年6月19日(木) 15:35
by usao
オフトピック
sec = nsec * 1.0e-9;
って書くかな.理由は見やすいから.
Re: nsecをsecへ変換する方法
Posted: 2014年6月19日(木) 18:36
by ISLe()
個人的には、この用途での浮動小数点数はデメリットしか浮かばないのでBですね。
Re: nsecをsecへ変換する方法
Posted: 2014年6月19日(木) 18:54
by h2so5
jun039 さんが書きました:
結果としては、どちらでも同じ結果になると思うのですが、
本当にそうでしょうか?
コード:
#include <stdio.h>
int main() {
double nsec = 3.0;
if ((nsec * 0.000000001) == (nsec / 1000000000.0))
puts("Equal");
else
puts("Not Equal");
return 0;
}
Re: nsecをsecへ変換する方法
Posted: 2014年6月19日(木) 20:51
by softya(ソフト屋)
私はlong longで処理するとか、そもそも変換しない(表示を工夫)とかdoubleは介在させません。
Re: nsecをsecへ変換する方法
Posted: 2014年6月19日(木) 22:33
by jun039
皆様回答してくださりありがとうございます!!
usao様>
確かに、nsecだと0がいくつ必要なのかがわかりにくくなるので、
その方法はいいですね!
ISLe()様>
浮動小数点は極力避けるべきなのですね。
演算としては、整数演算のほうが効率よくみえますので。
h2so5様>
確かに記載していただいたコードを実行するとNot Equalになりますね。
でも、それぞれをprintfで出力してみると同じものが表示されるんです。
内部では異なるのかな?
コード:
double nsec = 3.0;
printf("%.15f, %.15f\n", (nsec * 0.000000001), (nsec / 1000000000.0));
softya(ソフト屋) 様>
可能な限りは浮動小数点を避けるコードが良いということですね。
上記を参考に、対応したいと思います。(浮動小数点はしない方向で検討してみます)
非常に勉強になりました!
今後共、よろしくお願いします。