⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _sfputd.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       */#include	"sfhdr.h"/*	Write out a floating point value in a portable format****	Written by Kiem-Phong Vo.*/#if __STD_Cint _sfputd(Sfio_t* f, Sfdouble_t v)#elseint _sfputd(f,v)Sfio_t*		f;Sfdouble_t	v;#endif{#define N_ARRAY		(16*sizeof(Sfdouble_t))	reg ssize_t	n, w;	reg uchar	*s, *ends;	int		exp;	uchar		c[N_ARRAY];	Sfdouble_t	x;	SFMTXSTART(f,-1);	if(f->mode != SF_WRITE && _sfmode(f,SF_WRITE,0) < 0)		SFMTXRETURN(f, -1);	SFLOCK(f,0);	/* get the sign of v */	if(v < 0.)	{	v = -v;		n = 1;	}	else	n = 0;	/* make the magnitude of v < 1 */	if(v != 0.)		v = frexpl(v,&exp);	else	exp = 0;	/* code the sign of v and exp */	if((w = exp) < 0)	{	n |= 02;		w = -w;	}	/* write out the signs and the exp */	SFOPEN(f,0);	if(sfputc(f,n) < 0 || (w = sfputu(f,w)) < 0)		SFMTXRETURN(f, -1);	SFLOCK(f,0);	w += 1;	s = (ends = &c[0])+sizeof(c);	while(s > ends)	{	/* get 2^SF_PRECIS precision at a time */		n = (int)(x = ldexpl(v,SF_PRECIS));		*--s = n|SF_MORE;		v = x-n;		if(v <= 0.)			break;	}	/* last byte is not SF_MORE */	ends = &c[0] + sizeof(c) -1;	*ends &= ~SF_MORE;	/* write out coded bytes */	n = ends - s + 1;	w = SFWRITE(f,(Void_t*)s,n) == n ? w+n : -1;	SFOPEN(f,0);	SFMTXRETURN(f,w);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -