c語言如何把 2, 3 的值設為1 414,1 732 ,而不是列印保留三位小數?

時間 2021-05-07 03:31:32

1樓:慕容思炫

我還是自己回答一下吧

#include

#include

double mysqrt(int x)

double y;

y=(double)(int)(sqrt(x)*1000)/1000;

return y;

int main()

printf("%f\n",sqrt(3));

printf("%f\n",mysqrt(3));

return 0;

輸出:1.732051

1.732000

2樓:Eagle Cheung

建議修改一下問題

開方函式sqrt()返回的是double型的資料,無論是float還是double型資料都無法精準表示1.414 和1.732,這是浮點數的表示方式決定的具體參考IEEE754

1.414

1.732

像題主這種需求,一般使用定點數解決。具體定點數如何抽象要結合應用場景考慮。

-------補充乙個有趣的事情-------

float是不能用來替換int的

由於float的底數是用23+1位儲存的(1位符號8位指數23位底數,底數第一位1被省略),

因此用float型資料表示大約2^24(或小於-(2^24))的整數數字時就可能會產生誤差。

這種誤差範圍隨著數字位數的增加而增加,比如

請問c語言中的 的返回值是什麼?

暮無井見鈴 一段時間內 都是。至少在 C99 C17 中,true 就是 int 型別的 1 不過在 C23 1 中改掉了。true 變成了 Bool 1u 型別變成了 Bool 而在預處理環境中表現為無符號整數。 邱昊宇 是 int 型的 0 或者 1 The equal to and not e...

c語言的引數傳遞和返回值,如何從彙編角度來理解他們的不同之處?

僅從彙編角度來說,沒有區別,甚至沒有傳參和返回值這個概念。你可以自行決定使用堆疊或暫存器來傳遞,簡單點講,往暫存器裡丟個東西,只要不清零或重寫,任何時候你都可以使用它。所謂的返回值也可以不止乙個,想返回什麼就把什麼丟到任何乙個或多個暫存器裡,乙個暫存器存不下可以用多個。所謂返回只是操作一下ip,有沒...

c語言如何不用陣列把數字倒過來?

NoneType unsigned long long reverse unsigned long long Val return Res 雪地裡的枯樹 使用指標,如int a 2 int p a for int i 1 i 0 i 這樣就可以實現對數字的反向輸出。 輸入a,輸出a的各位數字反轉的結...