對於高精度小數的操作(C語言)

時間 2022-03-12 19:25:15

1樓:暗流

如果要求精度非常非常高的話,可以用字串模擬數字。

2樓:匿名使用者

// 小數的高精度表示。

#include

#include

#include

const int maxlen = 500;

int change(char mantissa, int denominator,int numerator = 1)

if(numerator == 0)

sign = (numerator * denominator < 0) ? -1 : 1;

t = abs(numerator / denominator);

numerator = abs(numerator);

denominator = abs(denominator);

if(t == 0)

else

}else

if(sign == -1) mantissa[i++] = '-';

for(n = 0; n < i / 2; ++n)

mantissa[i++] = '.';

}remainder = numerator % denominator;

while(i < maxlen && remainder)

if(i == maxlen) break;

t = remainder / denominator;

mantissa[i++] = t + '0';

remainder -= t * denominator;

}mantissa[i] = '\0';

return 1;

}void show(char s)

printf("\n");

}int main()

3樓:順長嘉

類似於大數,可以用陣列訪問啊

4樓:匿名使用者

這是實際專案裡遇到的問題?哪有用到這麼小的資料啊!!既然用到這麼小的資料,是不是小數點前的資料基本不變?那就小數點移位處理吧,估計移位處理也做不到100位!!

北大acm1001 exponentiation 用c語言怎麼寫呢?對高精度數應該怎麼處理?

5樓:

給你個我的程式,注釋應該還算詳盡,希望對你有幫助

#include

#include

#include

#include

#include

using namespace std;

inline int max(int a,int b)

class long

inline long(long x)

else flag=true;

memset(num,0,sizeof(num));

for(len=0; x>0; len++)

if(len==0) len=1;

}inline bool iszero()

inline long(char *s)

if(s[0]=='-')

flag=false;

else flag=true;

}inline long(string s)

if(s[0]=='-')

flag=false;

else flag=true;

}inline void print(int k=0)

else

}long c;

int i,t;

if(len>b.len) c.len=len; else c.len=b.len;

for(i=t=0; i0)

c.flag=flag;

return c;

if((flag^b.flag)==true)

else

}long c;

int i,t;

int key=cmp(*this,b);

if(key==0)

return long(long(0));

c.len=max(len,b.len);

if(key<0)

}else}}

else

}else

}}while(c.len>1&&c.num[c.len-1]==0)

c.len--;

return c;

void chx()

for(j=t=0; j<=b.len; j++)

if(t<0)

}c.num[i]=q;

}for(; r.len>

for(c.len=len-b.len+1; c.len>

if(c.iszero())

return long(long(0));

return c;//這裡改成return r即為取模運算

for(j=t=0; j<=b.len; j++)

if(t<0)

}c.num[i]=q;

}for(; r.len>

for(c.len=len-b.len+1; c.len>

r.flag=true;

return r;

}void right_move(int n=1)

for(int i=n;i<=len;i++)

num[i-n]=num[i];

len-=n;

}void left_move(int n=1)

for(int i=len;i>=0;i--)

num[i+n]=num[i];

for(int i=0;ia.len)

return -1;

if(b.len=0;i--)}}

float(char * a)}}

float(double a)}}

void left_move(int n=1)

this->float.left_move(n);

while(float.len>1&&float.len>

float.len--;

}void right_move(int n=1)

this->float.right_move(n);

if(this->float.lenfloat.len=pos;

if(this->float.len<1)

this->float.len=1;

} float operator-(float &b)

if(b.iszero())

return *this;

float c=*this,d=b;

chx(c,d);

c.float=c.float-d.float;

if(c.pos+1float*b.float;

c.pos=this->pos+b.pos+1;

/*if(c.pos+1c.pos)

}if(c.float.len<=c.pos)

c.float.len=c.pos+1;

return c;

}float operator/(float &b)

void print(int k=precision)}};

void cin()

if(a.iszero())

for(int i=1;i

b=a*b;

b.print();

cout<

} }

int main()

如何用c語言計算小數點後位數(float本身都無法精確)

6樓:匿名使用者

1、先把浮點數變成字串,再通過小數點確定小點後面的位數。

2、例程:

#include

#include

void main()}

7樓:匿名使用者

c語言本身並不提供高精度的小數運算,如果需要,可以查詢一下數值計算方面的資料,不同的應用場景有不同的演算法來計算

8樓:潘達

float以10進製只有7個有效數字,如果你存的數大於7位那麼一定會不準確,小於7位的就準確,其實float只有前7位有意義,有時會只有6位有意義。。。 也就是說你只用用7-整數字數就行,如果整數字為0,那麼你只需要7+第乙個不是0的小數所在位置即可,即此時小樹位數是大於7的,但有效數字個數仍然是7。。。。

9樓:匿名使用者

在printf("%f\n",number-temp);的%m.nf

10樓:阿牛哥曾阿牛

c語言字串的學習,輸入指定字串,並且計算字串的位數

c語言怎麼對浮點型的數求餘?

11樓:大野瘦子

這樣:float a=3.14 ,b=3;

int c;

a*=100;

b*=100;

c=(int)a%(int)b;

a=(float)c/100;

%只能用於整形,不能用於浮點,如果浮點定義,必然報錯,結果應該是0,不可能是0.14,int=3.14系統預設為3 3%3=0,想得到0.14可以借助系統函式。

注意事項

% 只用於整型的計算,後乙個數不能是0,參與運算的資料可正可負。

對於x%y ,計算之後結果的正負與 x 的符號相同,如果前者是較小的數,後者是較大的數,那麼,結果直接為較小的數。例如:

10%3=1

3%10=3

10%-3=1

-3%10=-3

-10%-3=-1

-3%-10=-3

3%13=3

0%3=0

0%-3=0

3%0  (×)error!

-3%0  (×)error!

10.0%3.0 (×)error!  // 浮點型不能進行模運算

12樓:天雲一號

在c語言中,浮點數是不能進行求餘操作的。

因為c語言規定,求餘運算子( % )的左右運算元必須為int型別。

浮點型別的數可以表示小數,所以浮點數相除後能用小數表示,不存在餘數的問題,所以也就不能進行求餘運算。

如:int a=3, b=2, f1;

float c=3, d=2, f2;

f1 = a%b;   // 合法

f2 = c%d;   // 不合法

13樓:張三李四王五幹

int a=3.14 ,b=3可以的

a相當於把3.14強制轉化為整數3賦值給a整數和整數取餘3%3=0

如果你要得到3.14%3=0.14的效果math.h有個函式叫fmod

14樓:匿名使用者

1,%只能用於整形,不能用於浮點,如果浮點定義,必然報錯2,結果應該是0,不可能是0.14,int=3.14系統預設為3 3%3=0

3,若想得到0.14這樣來算,也可以借助系統函式;

float a=3.14 ,b=3;

int c;

a*=100;

b*=100;

c=(int)a%(int)b;

a=(float)c/100;

C語言資料型別問題,C語言資料型別小數精度問題 急

網海1書生 首先糾正一下,這不是無符號int,是有符號,符號位就是用來表示正負數的。取值範圍的總數肯定是個偶數,這個好理解吧?那麼在這個數量範圍內,正數的個數和負數的個數肯定不可能相同啦,否則它們的和就是偶數,那麼你把0這個數往哪放?你也可以這樣想 把偶數個數放到數軸上,處在最中間的肯定是兩個數,不...

c語言中小數部分是怎麼相加的,怎麼用c語言求乙個陣列中所有數的整數部分和及小數部分和?

1.c語言的小數都是浮點數。浮點數屬於floating binary point types,也就是說都double型的數值在相加減的時候,會將數值轉換成二進位制的數值如10001.10010110011這種表示發再做相加減,但是在轉換成二進位制 表示的時候,儲存小數部分的位數會有不夠的現象,即無限...

C語言 線性表的實現,線性表的基本操作c語言實現

不是沒錯誤了。首先你就少了標頭檔案。include 先加上這個標頭檔案你再看看。好象還有些錯誤。好象是關於你的那個列舉的哇。資料結構c語言版 使用線性表的順序儲存結構定義 靜態 實現線性表的初 線性表的基本操作c語言實現 譚浩強的c語言教程上面有完整的程式。用c語言編寫鏈式儲存結構下實現線性表的建立...