Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. uib fxs(char* pd, uint sz, float value)
  2. {
  3. char* p = pd;
  4.  
  5.  
  6. // Special cases.
  7. if((*((uid*) &value) & 0x7F800000)-1 >= (0x7F800000-1))
  8. {
  9.  
  10. }
  11.  
  12. // Common
  13. const sid exp = FXS_EXPONENT(value) - FLT_MANTISSA_BITS;
  14. const sid shift = FXS_PRECISION_BITS + exp - 4;
  15. const uiq mantissa = FXS_MANTISSA_NLZ(value);
  16.  
  17.  
  18. /*
  19. * Convert integer component
  20. *
  21. */
  22. uiq integer;
  23.  
  24. if(exp > 0)
  25. {
  26. integer = mantissa << exp;
  27. }
  28.  
  29. else if(exp < 0)
  30. {
  31. if(-exp > FLT_MANTISSA_BITS)
  32. {
  33. *p++ = '0';
  34. *p++ = '.';
  35.  
  36. goto FRACTION;
  37. }
  38.  
  39. integer = mantissa >> (-exp);
  40. }
  41.  
  42. else
  43. {
  44. integer = mantissa;
  45. }
  46.  
  47. p += uiqxs(p, 32, integer);
  48. *p++ = '.';
  49.  
  50. FRACTION:
  51. /*
  52. * Convert fractional
  53. *
  54. */
  55. if(shift >= FXS_PRECISION_BITS-4 || shift <= 0)
  56. {
  57. *p++ = '0';
  58. }
  59.  
  60. else
  61. {
  62. uiq fraction = mantissa << shift;
  63. uib digits = 0;
  64. char c;
  65.  
  66.  
  67. for(uib i = 0; fraction && i < FXS_PRECISION_DIGITS; i++)
  68. {
  69. fraction &= 0x0fffffffffffffffllu;
  70. fraction *= 10;
  71.  
  72. p[i] = (c = '0' + (fraction >> (FXS_PRECISION_BITS-4)));
  73.  
  74. if(c)
  75. digits++;
  76. }
  77.  
  78. p += digits;
  79. }
  80.  
  81.  
  82. DONE:
  83. *p = '\0';
  84.  
  85. return (p-pd);
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement