nsecをsecへ変換する方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
jun039

nsecをsecへ変換する方法

#1

投稿記事 by jun039 » 10年前

いつも利用させて頂いております。

早速ですが、、、、nsecをsecへ変換する場合に、どちらがいいのかを
相談したいと思います。

 A : sec = nsec * 0.000000001
 B : sec = nsec / 1000000000

結果としては、どちらでも同じ結果になると思うのですが、
皆様が使うとしたら、どちらの方法で行いますか?
または、他の手段を使われる方もいるのでしょうか??

できれば理由とともに教えていただけると助かります。

申し訳ありませんが、よろしくお願いします。

アバター
usao
記事: 1887
登録日時: 11年前

Re: nsecをsecへ変換する方法

#2

投稿記事 by usao » 10年前

オフトピック
sec = nsec * 1.0e-9;
って書くかな.理由は見やすいから.

ISLe()

Re: nsecをsecへ変換する方法

#3

投稿記事 by ISLe() » 10年前

個人的には、この用途での浮動小数点数はデメリットしか浮かばないのでBですね。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: nsecをsecへ変換する方法

#4

投稿記事 by h2so5 » 10年前

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;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: nsecをsecへ変換する方法

#5

投稿記事 by softya(ソフト屋) » 10年前

私はlong longで処理するとか、そもそも変換しない(表示を工夫)とかdoubleは介在させません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

jun039

Re: nsecをsecへ変換する方法

#6

投稿記事 by jun039 » 10年前

皆様回答してくださりありがとうございます!!

usao様>
  確かに、nsecだと0がいくつ必要なのかがわかりにくくなるので、
 その方法はいいですね!

ISLe()様>
  浮動小数点は極力避けるべきなのですね。
  演算としては、整数演算のほうが効率よくみえますので。

h2so5様>
  確かに記載していただいたコードを実行するとNot Equalになりますね。
  でも、それぞれをprintfで出力してみると同じものが表示されるんです。
  内部では異なるのかな?

コード:

	double nsec = 3.0;
	printf("%.15f, %.15f\n", (nsec * 0.000000001), (nsec / 1000000000.0));
softya(ソフト屋) 様>
  可能な限りは浮動小数点を避けるコードが良いということですね。


上記を参考に、対応したいと思います。(浮動小数点はしない方向で検討してみます)
非常に勉強になりました!

今後共、よろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る