Software zum Installieren eines Smart-Mirror Frameworks , zum Nutzen von hochschulrelevanten Informationen, auf einem Raspberry-Pi.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ieee754.js 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // IEEE754 conversions based on https://github.com/feross/ieee754
  2. var abs = Math.abs;
  3. var pow = Math.pow;
  4. var floor = Math.floor;
  5. var log = Math.log;
  6. var LN2 = Math.LN2;
  7. var pack = function (number, mantissaLength, bytes) {
  8. var buffer = new Array(bytes);
  9. var exponentLength = bytes * 8 - mantissaLength - 1;
  10. var eMax = (1 << exponentLength) - 1;
  11. var eBias = eMax >> 1;
  12. var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;
  13. var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;
  14. var index = 0;
  15. var exponent, mantissa, c;
  16. number = abs(number);
  17. // eslint-disable-next-line no-self-compare -- NaN check
  18. if (number != number || number === Infinity) {
  19. // eslint-disable-next-line no-self-compare -- NaN check
  20. mantissa = number != number ? 1 : 0;
  21. exponent = eMax;
  22. } else {
  23. exponent = floor(log(number) / LN2);
  24. if (number * (c = pow(2, -exponent)) < 1) {
  25. exponent--;
  26. c *= 2;
  27. }
  28. if (exponent + eBias >= 1) {
  29. number += rt / c;
  30. } else {
  31. number += rt * pow(2, 1 - eBias);
  32. }
  33. if (number * c >= 2) {
  34. exponent++;
  35. c /= 2;
  36. }
  37. if (exponent + eBias >= eMax) {
  38. mantissa = 0;
  39. exponent = eMax;
  40. } else if (exponent + eBias >= 1) {
  41. mantissa = (number * c - 1) * pow(2, mantissaLength);
  42. exponent = exponent + eBias;
  43. } else {
  44. mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);
  45. exponent = 0;
  46. }
  47. }
  48. for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);
  49. exponent = exponent << mantissaLength | mantissa;
  50. exponentLength += mantissaLength;
  51. for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);
  52. buffer[--index] |= sign * 128;
  53. return buffer;
  54. };
  55. var unpack = function (buffer, mantissaLength) {
  56. var bytes = buffer.length;
  57. var exponentLength = bytes * 8 - mantissaLength - 1;
  58. var eMax = (1 << exponentLength) - 1;
  59. var eBias = eMax >> 1;
  60. var nBits = exponentLength - 7;
  61. var index = bytes - 1;
  62. var sign = buffer[index--];
  63. var exponent = sign & 127;
  64. var mantissa;
  65. sign >>= 7;
  66. for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);
  67. mantissa = exponent & (1 << -nBits) - 1;
  68. exponent >>= -nBits;
  69. nBits += mantissaLength;
  70. for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);
  71. if (exponent === 0) {
  72. exponent = 1 - eBias;
  73. } else if (exponent === eMax) {
  74. return mantissa ? NaN : sign ? -Infinity : Infinity;
  75. } else {
  76. mantissa = mantissa + pow(2, mantissaLength);
  77. exponent = exponent - eBias;
  78. } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);
  79. };
  80. module.exports = {
  81. pack: pack,
  82. unpack: unpack
  83. };