[英]Why is the output of cout << 7/9*9; is zero?
為什么以下代碼的輸出等於0或serven?
cout << 7/9*9; //output 0 (zero) why?
float nine = 9;
float seven = 7;
float i = seven/nine*nine;
cout << i //output 7 Why?
謝謝您的幫助。
7/9 * 9將這些數字評估為整數,因此7/9的計算結果為0,0 * 9 = 0。
當你使它們浮動時,你正在執行預期的計算。
嘗試7.0 / 9 * 9得到7,然后你將進行浮點運算。
在C中,當您對整數進行除法時,其余部分將被丟棄。 在這里,你正在做7/9,然后取結果並乘以9.在步驟中,接下來是C的想法:
7 / 9 = 0
0 * 9 = 0
使用浮動時,它可以正常工作,因為其余部分不再被丟棄。
在:
cout << 7 / 9 * 9;
你正在做整數運算。 所以7/9是0而0 * 9是0。
要使用浮點運算(這是您在第二個示例中使用的),您要執行以下操作:
cout << 7.0 / 9 * 9;
7/9*9
的equals (7 / 9) * 9
,但作為7
和9
是整數,並且不浮點數, 7 / 9
等於0(除法的商)。
我認為這是一個精確的問題。 /和*運算符的優先級相同,因此7/9 * 9從左到右依次為(7/9)* 9。 問題是(7/9)在整數運算中為0。 當你明確地將它們存儲為浮點數時,/操作是以浮點形式完成的,它可以以比int更高的精度存儲7/9。
如果要在沒有精度問題的情況下在一行中進行計算,請嘗試:
cout << 7.0f / 9.0f * 9.0f;
許多正確的答案已經。 附加說明:如果要將其保留為整數運算而不使用浮點,則需要對其進行排序,以便在除數之前進行乘法以獲得最高精度(只要在乘法過程中不發生溢出。比(7.0/9)*9
將轉換為浮點數,你可以做(9*7)/9
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.