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; 網海1書生 首先糾正一下,這不是無符號int,是有符號,符號位就是用來表示正負數的。取值範圍的總數肯定是個偶數,這個好理解吧?那麼在這個數量範圍內,正數的個數和負數的個數肯定不可能相同啦,否則它們的和就是偶數,那麼你把0這個數往哪放?你也可以這樣想 把偶數個數放到數軸上,處在最中間的肯定是兩個數,不... 1.c語言的小數都是浮點數。浮點數屬於floating binary point types,也就是說都double型的數值在相加減的時候,會將數值轉換成二進位制的數值如10001.10010110011這種表示發再做相加減,但是在轉換成二進位制 表示的時候,儲存小數部分的位數會有不夠的現象,即無限... 不是沒錯誤了。首先你就少了標頭檔案。include 先加上這個標頭檔案你再看看。好象還有些錯誤。好象是關於你的那個列舉的哇。資料結構c語言版 使用線性表的順序儲存結構定義 靜態 實現線性表的初 線性表的基本操作c語言實現 譚浩強的c語言教程上面有完整的程式。用c語言編寫鏈式儲存結構下實現線性表的建立...C語言資料型別問題,C語言資料型別小數精度問題 急
c語言中小數部分是怎麼相加的,怎麼用c語言求乙個陣列中所有數的整數部分和及小數部分和?
C語言 線性表的實現,線性表的基本操作c語言實現