Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
float.c
Package: tcpmp.rar [view]
Upload User: wstnjxml
Upload Date: 2014-04-03
Package Size: 7248k
Code Size: 2k
Category:
Windows CE
Development Platform:
C/C++
- ////////////////////////////////////////////////////////////////////////////
- // **** WAVPACK **** //
- // Hybrid Lossless Wavefile Compressor //
- // Copyright (c) 1998 - 2004 Conifer Software. //
- // All Rights Reserved. //
- // Distributed under the BSD Software License (see license.txt) //
- ////////////////////////////////////////////////////////////////////////////
- // float.c
- #include "wavpack.h"
- int read_float_info (WavpackStream *wps, WavpackMetadata *wpmd)
- {
- int bytecnt = wpmd->byte_length;
- char *byteptr = wpmd->data;
- if (bytecnt != 4)
- return FALSE;
- wps->float_flags = *byteptr++;
- wps->float_shift = *byteptr++;
- wps->float_max_exp = *byteptr++;
- wps->float_norm_exp = *byteptr;
- return TRUE;
- }
- void float_values (WavpackStream *wps, long *values, long num_values)
- {
- while (num_values--) {
- int shift_count = 0, exp = wps->float_max_exp;
- f32 outval = { 0, 0, 0 };
- if (*values) {
- *values <<= wps->float_shift;
- if (*values < 0) {
- *values = -*values;
- outval.sign = 1;
- }
- if (*values == 0x1000000)
- outval.exponent = 255;
- else {
- if (exp)
- while (!(*values & 0x800000) && --exp) {
- shift_count++;
- *values <<= 1;
- }
- if (shift_count && (wps->float_flags & FLOAT_SHIFT_ONES))
- *values |= ((1 << shift_count) - 1);
- outval.mantissa = *values;
- outval.exponent = exp;
- }
- }
- * (f32 *) values++ = outval;
- }
- }
- void float_normalize (long *values, long num_values, int delta_exp)
- {
- f32 *fvalues = (f32 *) values, fzero = { 0, 0, 0 };
- int exp;
- if (!delta_exp)
- return;
- while (num_values--) {
- if ((exp = fvalues->exponent) == 0 || exp + delta_exp <= 0)
- *fvalues = fzero;
- else if (exp == 255 || (exp += delta_exp) >= 255) {
- fvalues->exponent = 255;
- fvalues->mantissa = 0;
- }
- else
- fvalues->exponent = exp;
- fvalues++;
- }
- }