[解決済み] C言語でfloatやdoubleを使用する場合、-0.0000とは何ですか?
2022-02-11 17:37:14
質問内容
#include <stdio.h>
#include <stdlib.h>
#define answer 3.141593
void main(int argc, char **argv) {
float a = (argc - 2)?: strtod(argv[1], 0);
printf("double = %lf ,float = %f", a-answer , a-answer);
}
という感じで実行すると
./a.out 3.141593
の場合、出力は
double = -0.000000 ,float = -0.000000
なぜか
-0.00000
を出力させるにはどうしたらよいでしょうか?
0.000000
?
を作成するにはどうすればよいですか?
a == answer
?
2の補数を使っているのに、どうして-0の値があるのですか?
どのように解決するのですか?
浮動小数点数は2の補数を使用しません。浮動小数点数には符号、指数、仮数がありますが、あなたの数値は符号が0だけ、あるいは-1.0e-15のような数値があり、それが-0.0000と表示されます。この小さな違いは、無限精度の数値を有限精度のデータ型に格納できない(丸めが発生する)ことと、doubleをfloatに変更したときに追加の丸めが発生することによるものです。(バイナリ表現では3.141593は無限周期の数ですが、これはどのデータ型にこの数を格納するかに依存することを念頭に置いてください)
関連
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] floatとdoubleの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】strcmpが機能しない
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み] テスト
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC