javascript - 获取有效数字的小数部分和“the”javascript数字NaN的符号位
问题描述
对于NaN
javascript 中的一个值(例如指数是 11111111111),有没有办法获取符号位和有效值(忽略隐含的 1 位)?
如果不是这种情况,这是否意味着double (Number)
javascript 中的 a 不代表2^64
可能的状态,而是 ( 2^64 - 2^52
) 可能的状态?
解决方案
正如 Heretic Monkey 指出的那样,规范明确指出 javascript 中的 NaN 数字都是无法区分的 -
“在某些实现中,外部代码可能能够检测各种非数字值之间的差异,但这种行为取决于实现;对于 ECMAScript 代码,所有 NaN 值彼此无法区分。”
https://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types-number-type
所以看起来这是不可能的 - 或者至少以独立于平台的方式不可能。
一个建议是使用类型化数组。这似乎在 IE 和 Chrome 中有效,但在 Firefox 中无效!问题是当您将双精度值存储在变量中时,在 Firefox 中它将丢失您为 NaN 值设置的所有位模式......
var buffer = new ArrayBuffer(8);
var floats = new Float64Array(buffer);
var bytes = new Uint8Array(buffer);
floats[0] = NaN;
var print_float_bytes = function() {
var pstr = "";
for (var i = 0; i < 8; i += 1) {
pstr = pstr + " " + bytes[i];
}
console.log(pstr);
};
console.log("printing a fresh NaN");
print_float_bytes();
bytes[7] = 255;
console.log("printing a NaN with the sign bit as 1");
print_float_bytes();
bytes[0] = 1;
console.log("printing a NaN with the significand as a number slightly bigger than 1 and a positive sign");
print_float_bytes();
console.log("printing the floating point number: " + floats[0]);
var p = floats[0];
floats[0] = p;
console.log("printing roundtripped NaN");
print_float_bytes();
var pointless = function(pdbl) {
return pdbl;
};
p = floats[0];
p = pointless(p);
floats[0] = p;
console.log("printing even more roundtripped NaN");
print_float_bytes();
推荐阅读
- javascript - 我有带有粒子的sketch.js,但粒子在我的导航栏上,所以链接不可点击
- python - 按频率对列表进行排序
- reactjs - 变量 JSX 进入危险地渲染 SetInnerHTML()
- c++ - 如何使 C++ #define 语句在 VScode 格式化后不换行?
- sql-server - 如何在 tSQLt 中查看测试结果?
- openstack - Ussuri:QCOW2-Win10-Client 导入 OpenStack 后无法启动
- ios - Corelocation - didUpdateLocations 永远不会被调用
- php - PHP SQL MYSQL 数据库名称有 bash (-) 使用 group_concat 不能打印正确的数据
- reactjs - 如何覆盖prime-react组件CSS样式?
- python - Compose 文件 '.\docker-compose.yml' 无效,因为:顶级属性“db”无效