📄 _sfputd.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 + -