『壹』 c语言用double写了一个表示科学计数法的程序,但是却读不出来30位以上的数,怎么办
double 是抄64 位(8字节),52 位代表有袭效数位,11 位表示指数,一位表示符号,精度(有效数位)十进制的 16 位。int64 的有效数位不过是20位,int128 的有效数位不过是40位,long double(double128)的有效数位不过是34位。何况 int128、double128 的原子类型(cpu、fpu 内寄存器支持)目前还没有在 PC 机实现。
网上说double的精度可以到50多位,这是不可能的!
『贰』 C语言中、科学计数法1.23456e+002具体代表什么意思、或者说怎么理解这个数
e+002 表示10 的2次方。 科学计数法, 用e 表示10 , 加号表示正整数次方, 减号,表示负整数次方, 这里就是等于 123.456
『叁』 C语言 科学计数法
do {
a1[i++]=getchar();
}while (a1[i]!='.');
这儿的判断不对,因为此时a1[i]还没有值。
『肆』 c语言,输出科学计数法
#include
#include
charnum[110];
charresult[110];
intlen;
intmain()
{
inti,j;
ints1,s2;//小数点位置,字符串首个非零数位置
intfind1=0;
intfind2=0;//find1:是否找到小数点位置标志位,find2:是否找到首个非零数位置,0:表示未找到
intindex;
scanf("%s",num);
len=strlen(num);//读取字符串长度
for(i=0;i
{
if(find1&&find2)
break;
if(num[i]=='.'){
s1=i;
find1=1;
}
elseif(num[i]!='0'&&!find2){
find2=1;
s2=i;
}
}
if(s1-s2>0)//根据二个位置确定指数大小
index=s1-s2-1;
elseif(s2>s1)
index=s1-s2;
j=0;
for(i=s2;i
{
if(num[i]=='.')
continue;
elseif(i==s2){//确定底数小数点位置
if(num[i+1]){
result[j++]=num[i];
result[j++]='.';
}
else
result[j++]=num[i];
}
else
result[j++]=num[i];
}
result[j]='