gpt4 book ai didi

javascript - JavaScript 中从 double 到 float?

转载 作者:行者123 更新时间:2023-11-28 15:06:17 24 4
gpt4 key购买 nike

我的理解是JavaScript中的所有数字都是 double float 。如何在 JavaScript 中将 double 型转换为浮点型?我理解精度损失,但这是可以忍受的。

我需要描绘C风格的 float

最佳答案

这适用于现代引擎:

function doubleToFloat ( d ) {
if ( Float32Array )
return new Float32Array([d])[0];
}

请注意,结果的数据类型仍然是数字( double ),但它只使用 32 位信息。我为 Float32Array 不可用的情况添加了后备:

function doubleToFloat ( d ) {
if ( Float32Array )
return new Float32Array( [ d ] )[ 0 ];

if ( d === 0 )
return d;

var sign = 2*(d >= 0) - 1;
var b = Math.abs( d ).toString( 2 );
var decimalIndex = b.indexOf( '.' );
var oneIndex = b.indexOf( '1' );
var exponent, mantissa, round, result;

if( decimalIndex === -1 ) {
exponent = b.length - 1;
mantissa = b.substr( 1, 23 );
round = +( mantissa.length === 23 && b[24] === '1' );
result = sign*( parseInt( '1' + mantissa, 2 ) + round )*Math.pow( 2, exponent - mantissa.length );
} else if ( decimalIndex === 1 ) {
exponent = 1 - oneIndex;
if ( oneIndex === 0 ) {
mantissa = '1' + b.substr( 2, 23 );
round = +( mantissa.length === 24 && b[25] === '1' );
result = sign*( parseInt( mantissa, 2 ) + round )*Math.pow( 2, 1 - mantissa.length );
} else {
mantissa = b.substr( oneIndex, 24 );
round = +( mantissa.length === 24 && b[oneIndex + 24] === '1' );
result = sign*( parseInt( mantissa, 2 ) + round )*Math.pow( 2, 1 + exponent - mantissa.length );
}
} else {
exponent = decimalIndex - 1;
mantissa = b.replace( '.', '' ).substr( 1, 23 );
round = +( mantissa.length === 23 && b.replace( '.', '' )[24] === '1' );
result = sign*( parseInt( '1' + mantissa, 2 ) + round )*Math.pow( 2, decimalIndex - mantissa.length - 1 );
}

if ( exponent < -126 )
return 0;
if ( exponent > 127 )
return sign*Infinity;

return result;
}

关于javascript - JavaScript 中从 double 到 float?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38777729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com