
最近、ふと『浮動小数点』について疑問を持ちました。
それは『浮動小数点』がどんな場合に役立つのか?という事です。
C言語では標準で『float』型と『double』型がありますよね。
私は昔、C言語を始めたころにテスト・プログラムなどで使った経験しかなく
その後に『電卓ソフト』を作ろうとしたときに『誤差』が原因で役に立たない
ことを知りました。『誤差』があることは知っていましたが…。
そこで質問。内容は『浮動小数点』はどんな場面で利用されているかです。
実際の『ソフトウェア開発』や趣味でフリーソフトを作った場合も含み、あと
こんな場面で役に立つのではという事を知りたいのです。
アンケートみたいになりますが、『アンケート』カテゴリでは、あまり回答などが
集まらないと思い『C/C++』カテゴリのこちらで質問としました。
よろしくお願いします。
No.6ベストアンサー
- 回答日時:
#4です。
> 『科学技術計算』などでも、多少の計算誤差は問題しないでもよいのですね。
たとえば実験データの解析とかだと、元々の測定値がかなり誤差を含んでいますので、それに比べれば計算誤差は微々たるものです。それに、物理学上の計算なんかは、必ず有効数字何桁という表し方になりますから、double型の精度があれば普通は事足ります。
> 最後に『long double』型もあるのは知っていましたが、標準でサポートされたのですか。
> やはり C99 規格からですね。
C89から(つまり初めから)です。
再回答有り難うございます。
実験データの解析では、測定値の段階で『誤差』が既に含まれているものなのですか。
それで『浮動小数点』の計算誤差は特に気にする必要性がないのですね。分かりました。
『long double』型は 1989 年には標準でサポートされていた!ということは、ずっと
『long double』型が使えなかったのは処理系が 10 年以上もサポートしていなかったという
事ですね。私が C 言語を始めたのが 1993 年で『long double』型が処理系によっては
拡張されて存在しているものだと思いました。そして C99 で標準サポートとなったと
思ってしまいしました。2度の回答、どうも有り難うございました。
No.5
- 回答日時:
エクセルもデフォルトは浮動小数点ですよね。
double型であれば有効桁数が15桁ほどもてるので
技術計算も9割はこれで事たります。
(有効桁数が足りない場合は多倍長演算等を使い工夫します。)
他にもゲームの3D演算、座標値やマトリックス値等も浮動小数点で持つのが普通です。
現在のCPUのほとんどは浮動小数点に対する専用の命令を持っていて
整数演算とほとんど速度的な差がありません。
多分0.0001fを10000回足して1.0000fにならなかったのでそういう疑問を持ったのかと思います。
整数をビットで区切る固定小数点という方法で持てばこの誤差は無くなるでしょうが
その代わり割り算や掛け算が面倒になる上、小数点が固定され汎用的に使えなくなります。
固定小数点でもっても乗除の時点で誤差は発生します。
それに円周率等の無理数はどうやっても誤差のない数値で持つ事はできません。
より数学的にπ等を使って計算すれば誤差はでませんが、実際には
40.05mmとか具体的な数値が必要になる事がほとんどですので
この浮動小数点で大体の需要は満たしているのです。
>その後に『電卓ソフト』を作ろうとしたときに『誤差』が原因で役に立たない
世にある電卓及び電卓ソフトのほとんどは誤差がでると思います。
(有効桁数がある事を頭の片隅にいれておけば問題はないと思います。)
回答有り難うございます。
最近は 3D ゲームの処理が浮動小数点を使っても速度面で問題がない時代なのですよね。
昔は CPU の処理速度が 25MB ぐらいで『円』を描画するときは三角関数などを使わずに
『加算』と『減算』を使って行うのが高速描画の常識でしたね。→楕円も。
今は標準で CPU に『浮動小数点プロセッサ』があるようですね。最初に買ったパソコンは
エプソン機(486)で『浮動小数点プロセッサ』は自分でつけるしかありませんでした。バグもあったらしい。
固定小数点で電卓を作ったときは、かなり面倒になりました。その後に『多倍長実数演算』の
ライブラリを作成して桁数を上げることで精度を上げました。電卓の有効表示桁数は 16 桁で
内部の演算は 20 桁にしました。電卓の誤差修正はどんなアルゴリズムで行っているのでしょうね。
もしも、知っていれば再回答をお願いしたいです。
No.4
- 回答日時:
科学技術計算分野(現在でもFortranが使われることも多いですが)などでは浮動小数点は重要ですね。
あと、3Dの座標計算なんかでも浮動小数点数は必須です。こういった分野では、多少の計算誤差はほとんど問題になりません。これがお金の計算なんかだと、本来は整数で扱うべきものですし、1円違っても大変なので、浮動小数点数は概算以外には使えないでしょうね。あと、
> C言語では標準で『float』型と『double』型がありますよね。
long double型も標準でサポートされています。
回答有り難うございます。
『Fortran』言語は科学技術計算に向いている言語だと聞いた事がありましたが、
C言語ではあまり聞いた事がなかったので『浮動小数点』の必要性に疑問を感じました。
『科学技術計算』などでも、多少の計算誤差は問題しないでもよいのですね。
最後に『long double』型もあるのは知っていましたが、標準でサポートされたのですか。
やはり C99 規格からですね。→C99 はあまり詳しくないです。ネットでよいサイトを
発見しましたがまだ読んでいません。今度、じっくりと読んでみます。
ちなみに今使っている処理系では『long long』型も『long double』型も使えない環境です。
残念です。試せなくて。
No.2
- 回答日時:
ソフトウェアはかじった程度のもので、回答になっていませんが。
> 『誤差』が原因で役に立たないことを知りました。
役に立つ立たないは用途にも寄るので肯定も否定もしませんが、
どんな場合にも誤差ゼロで計算を行う方法があるのなら教えて頂きたいです。
浮動小数点での演算は有効桁数を超える時と10進数に変換表示する時に
誤差が出るのは
方式上止むをえませんが、この範囲内なら誤差はゼロですよ。
それはポケコンでよくあった、10進演算っていうんでしたっけ、
それと基本的に同じことで、そちらは10進数への変換誤差がないだけのことです。
浮動小数点での演算は高速なので多桁・多項の化学計算には有用だと
聞いた気がします。
回答有り難うございます。
たしかに saru_1234 さんのアドバイスどおりに用途によりますね。
昔、電卓を作ろうとしたときに入力したキーを数値化して管理する方式を取りました。
すると小数点の場合は『入力』しているだけでも『値』が狂うのです。→当然ですが…。
最終的には文字列で入力を管理して『double』型を指数の仮数部で扱い、指数変数を
用意して演算させました。その後に『多倍長実数演算』のライブラリを作成して差し替えました。
ポケコンでは10進演算があるのですか。十進 BASIC というフリーソフトは知っていましたが…。
科学計算には有用ですね。math ライブラリに算術関数があり、C99 の規格では『虚数』も扱える
関数が増えましたし、目的によりますね。役に立つかどうかは。
有り難うございました。
No.1
- 回答日時:
浮動小数点は、固定小数点と比較して、表すことが出来る数値の
範囲が広いですね。
例えば、1億円くらいの買い物をして、1円の単位までは多分必要
ないでしょう。百万円単位くらいで切り上げや切捨てをすると思い
ます。固定小数点は常に1円まで表現するので、表現の上限と下限が
狭くなります。浮動小数点は、必要な精度、先ほどの1億円で百万円
単位にしたら制度は3桁でいい訳ですので、数値の上限と下限の範囲
が広がるわけです。
まあ、極端な例ですが、考え方です。
素早い、回答有り難うございます。
表現上の考え方ですか。
たしかに浮動小数点の方が表現できる範囲が広いですし、1円単位での
処理は場合によっては必要なくなりますね。
出来たら『小数値』の必要性の意見がお聞きしたかったです。
質問不足でしたが参考になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# C++言語の16進数の表現についておしえてください 1 2022/11/14 17:46
- C言語・C++・C# 3つの倍精度浮動小数点値の平均を求めて、3つの引数全てを平均値に変更するメソッドを作成し、キーボード 1 2022/07/13 16:04
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- 日本語 https://eprints.lib.hokudai.ac.jp/dspace/bitstream 6 2022/05/22 18:54
- IT・エンジニアリング ITエンジニアの勉強時間や勉強方法について 初めまして閲覧いただきありがとうございます。 当方25歳 4 2022/06/09 18:51
- Excel(エクセル) Excelの関数について 3 2022/11/13 23:47
- 統計学 統計:アンケート結果の読み解き方法(カイ二乗検定の必要性の有無) 13 2022/12/03 23:13
- その他(悩み相談・人生相談) 女子Aにボールが飛んできた。 男子B「俺は○○。きみは?そのボールを投げてごらん。」 男子C「僕は○ 2 2023/06/12 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
有効数字について 以前質問をし...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
c languageで 簡単な質問があ...
-
浮動小数点演算を固定小数点演...
-
加算と減算で乗算と除算を表現...
-
符号誤り率の計算は例題でどの...
-
double型からfloat型への型変換...
-
MATLABでの行列の全要素の和
-
変換指定子%22-16gの表示...
-
浮動小数演算は実行環境の変化...
-
PICで小数点の演算
-
除算を使わずに10で割りたい。
-
ExcelのINT関数の計算結果がお...
-
大きすぎる数値になるとE+にな...
-
【C言語】RGBと輝度の計算に関して
-
ニュートン法でのプログラミング
-
O(n log n)について2
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
計算の丸め誤差の解消について
-
除算を使わずに10で割りたい。
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
”/”を使わずに割り算したいんで...
-
CRCの計算方法について
-
VB6.0での小数点の扱いについて
-
VBAでミリ秒まで出力する方法
-
時刻の比較
-
2進数データのビット演算
-
教えて小数点の比較!(C言語)
-
C言語 型変換のタイミング
おすすめ情報