問題はprintfのフォーマットの誤使用である - 使用%グラム/%Fの代わりに%dの
ところで - あなたはあなたのコードはここで何をしたか疑問に思っているならば理解に役立つかもしれないいくつかの要約説明は次のとおりです。
printfルーチンは、sqrtの浮動小数点結果を整数として処理しました。符号付きの符号なし整数は、その基礎となるビット表現を持っています(単純に言えば、それらがメモリやレジスタなどでどのように符号化されているかです)。 printfの書式を指定することで、特定のメモリ領域/レジスタのビットパターンをどのように解読すべきかを指定します(呼び出し規約などに依存します)。例えば:
unsigned int myInt = 0xFFFFFFFF;
printf("as signed=[%i] as unsigned=[%u]\n", myInt, myInt);
を与える: "=署名したように、[ - 1]の符号なし= [4294967295]として" 後最初の符号なし符号付きとして使用されるが、扱わ
一方のビットパターン。あなたのコードにも同じことが適用されます。 printfに、sqrtの浮動小数点結果を整数として 'エンコード'するために使用されたビットパターンを処理するように指示しました。 single precision floating point encoding formatによると、 "4100万"
:
float myFloat = 8.0;
printf("%08X\n", *((unsigned int*)&myFloat));
プリント:これを参照してください。 8.0は単純に(-1)^ 0 *(1 +分数= 0)* 2 ^(exp = 130-127)= 2 * 3 = 8.0ですが、ちょうど41000000(もちろん16進数)のように見えます。
コードを投稿できますか? – hmjd
問題のコードがなければ、これは有意義に答えられません。 –
sqrtは負の値を返しません。あなたの問題は非常に深刻です。これに答えるためにコードを参照する必要があることを認識していないという事実は、あなたの根本的な問題です。私はあなたがコンピュータが同じことをすることができるとは思わないことを願っています! –