Top/article/We-must-initialize-floating-point-variables
English | Japanese
English | Japanese

Menu

  • Top
  • Akihiko Yamaguchi 山口 明彦
  • Project プロジェクト
  • Text テキスト
  • Recent articles 最近の記事
  • Articles 記事一覧 (a to z)
  • Search 検索

Tags タグ †

  • [c++][bash][python][latex][php]
  • [linux][windows][mac][android]
  • [math][algorithm][idea][trick]
  • [liboctave][opencv][git][ros]
  • [setting][bug][general]
↑

Recent articles 最近の記事 †

2019-07-02
  • article/Display-Unix-Time
  • article/Synchronize-Linux-Time-to-Remote
2018-09-27
  • article/python-multimode-singleton
2018-09-02
  • article/rosinstall-git-default-remote
2017-07-28
  • article/SubMenu
2017-03-05
  • article/Import-a-different-version-of-OpenCV-in-Python
2015-08-17
  • article/DRC-finals-2015
2015-01-05
  • article/Upgrade-Android-to-Lollipop
2015-01-01
  • article/Kernel-panic-of-Linux-when-using-Xtion
  • article/Do-not-skip-freeing-data-when-using-tri-mesh-in-ODE
Access: 1/2542 - Admin
These search terms have been highlighted:[c++]

We must initialize floating point variables

浮動小数点型変数は必ず初期化する

[c++]
2010-07-26

使用する・しないに関わらず,float, double, long double 型の変数は必ず初期化するポリシーで生きることにする.

long double の変数を初期化せずにテキストに保存すると,予期しない文字コードが含まれた (std::setprecision などの書式を使っていた)*1.

初期化していない浮動小数点型変数 != ランダムな浮動小数

であることを肝に命じる.

サンプルコード:

#include <iostream>
#include <sstream>
using namespace std;
std::string float_to_str (const long double &val)
{
  stringstream ss;
  ss<< val;
  return ss.str();
}
int main(int argc, char**argv)
{
  long double t;
  cout<<float_to_str(t)<<endl;
  cout<<(t>=1.0l?"true":"false")<<endl;
  cout<<(t<=1.0l?"true":"false")<<endl;
  return 0;
}

これを g++ (Debian 4.4.2-4) でコンパイルし,実行すると,

-1.24287e+2453
false
false

という結果を返す(環境依存性が強いと思われる).

t が「ランダムな浮動小数」なら,二つの真理値は必ず (false,true) か (true,false) の組合せになることに注意.

なお,long double を double に変更すると,この問題は発生しないもよう.


*1 簡略化したコードでこの問題の再現を試みたが,うまく行かなかった.



Last-modified:2015-01-01 (Thu) 09:22:41 (3838d)
Link: article/Do-not-skip-initialization-use-Wshadow-option(3838d)
Site admin: Akihiko Yamaguchi.
Written by: Akihiko Yamaguchi.
System: PukiWiki 1.5.0. PHP 5.2.17. HTML conversion time: 0.011 sec.