二重の値が2未満
double=1.99999999999999978
int=1
だったので、それを試してみたが、この時間は
#include <math.h>
#include <stdio.h>
int main(){
int i;
double f=log(2.0)/log(pow(2.0,1.0/2.0));
printf("double=%0.17f\n",f);
printf("int=%d\n",(int) f);
}
は地獄のようにあなたがそれを経験する最初の時間を混乱いくつかの精度を追加します。今、あなたがこれを試してみたら
#include <math.h>
#include <stdio.h>
int main(){
int i;
double f=log(2.0)/log(pow(2.0,1.0/2.0));
printf("double=%0.17f\n",f);
printf("int=%d\n",(int) f);
printf("int=%d\n", (int)round(f));
}
値を正しく丸めるでしょう。あなたは(少なくともMac上)のmanページを見ると、あなたが以下のコメントを参照してくださいよ...
round, lround, llround -- round to integral value, regardless of rounding direction
が、彼らは方向とはどういう意味ですか、それはすべてのIEEE 754に指定されています。あなたがチェックした場合different ways to round to an integer...フロアは1
:)に向けて
でそれの前提のように思えます答えは偽です。実際の "問題"は、printfが浮動小数点数を丸めることです。 – user35702
また、intがdoubleと同じサイズで、 'log((double)int_64_variable)'のようなことをする場合も考えられます。私は、このためにCプログラムを書くより紙でこれをやる傾向が強くなっています。 ;) – sjsam
'int'へのキャストは床ではなくゼロに向かって切り捨てることにも注意してください。これは負の値に関係します。 – jamesdlin