1. ホーム
  2. c

[解決済み] 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は無限周期の数ですが、これはどのデータ型にこの数を格納するかに依存することを念頭に置いてください)