Eine Zahl logarithmisch abrunden ohne pow() und log() Funktion, nur mit Bit schupsen.
inline float binarLogFloor(float value) { uint32_t n = 0; std::memcpy(&n, &value, sizeof(value)); // no aliasing violation // Float 1 vorzeichen 8 exponent 23 mantisse // v exp M n &= 0b1111'1111'1100'0000'0000'0000'0000'0000; std::memcpy(&value, &n, sizeof(n)); return value; } // constexpr \o/ constexpr float binarLogFloor_bitcast(float value) { uint32_t n = std::bit_cast<uint32_t>(value); // Float 1 vorzeichen 8 exponent 23 mantisse // v exp M n &= 0b1111'1111'1100'0000'0000'0000'0000'0000; return std::bit_cast<float>(n); } static_assert(binarLogFloor_bitcast(0.2f) == 0.1875f); int main() { assert(binarLogFloor_memcpy(0.2f) == 0.1875f); assert(binarLogFloor_bitcast(0.2f) == 0.1875f); }
real(4) function binarLogFloor(value) implicit none real(4), intent(in) :: value integer(4) :: n n = transfer(value, n) ! Float 1 vorzeichen 8 exponent 23 mantisse ! v exp M n = IAND(n, b'11111111110000000000000000000000') binarLogFloor = transfer(n, binarLogFloor) end function
binarLogFloor(float): vmovd %xmm0, %eax andl $-4194304, %eax vmovd %eax, %xmm0 ret
Mit 1 Mantisse Bit
0.001 0.0009765625 0.002 0.001953125 0.003 0.002929688 0.004 0.00390625 0.005 0.00390625 0.006 0.005859375 0.007 0.005859375 0.008 0.0078125 0.009 0.0078125 0.01 0.0078125 0.011 0.0078125 0.012 0.01171875 0.013 0.01171875 0.014 0.01171875 0.015 0.01171875 0.016 0.015625 0.017 0.015625 0.018 0.015625 0.019 0.015625 0.02 0.015625 0.021 0.015625 0.022 0.015625 0.023 0.015625 0.024 0.0234375 0.025 0.0234375 0.026 0.0234375 0.027 0.0234375 0.028 0.0234375 0.029 0.0234375 0.03 0.0234375 0.031 0.0234375 0.032 0.03125 0.033 0.03125 0.034 0.03125 0.035 0.03125 0.036 0.03125 0.037 0.03125 0.038 0.03125 0.039 0.03125 0.04 0.03125 0.041 0.03125 0.042 0.03125 0.043 0.03125 0.044 0.03125 0.045 0.03125 0.046 0.03125 0.047 0.046875 0.048 0.046875 0.049 0.046875 0.05 0.046875 0.051 0.046875 0.052 0.046875 0.053 0.046875 0.054 0.046875 0.055 0.046875 0.056 0.046875 0.057 0.046875 0.058 0.046875 0.059 0.046875 0.06 0.046875 0.061 0.046875 0.062 0.046875 0.063 0.0625 0.064 0.0625 0.065 0.0625 0.066 0.0625 0.067 0.0625 0.068 0.0625 0.069 0.0625 0.07 0.0625 0.071 0.0625 0.072 0.0625 0.073 0.0625 0.074 0.0625 0.075 0.0625 0.076 0.0625 0.077 0.0625 0.078 0.0625 0.079 0.0625 0.08 0.0625 0.081 0.0625 0.082 0.0625 0.083 0.0625 0.084 0.0625 0.085 0.0625 0.086 0.0625 0.087 0.0625 0.088 0.0625 0.089 0.0625 0.09 0.0625 0.091 0.0625 0.092 0.0625 0.093 0.0625 0.094 0.09375 0.095 0.09375 0.096 0.09375 0.097 0.09375 0.098 0.09375 0.099 0.09375 0.1 0.09375 0.101 0.09375 0.102 0.09375 0.103 0.09375 0.104 0.09375 0.105 0.09375 0.106 0.09375 0.107 0.09375 0.108 0.09375 0.109 0.09375 0.11 0.09375 0.111 0.09375 0.112 0.09375 0.113 0.09375 0.114 0.09375 0.115 0.09375 0.116 0.09375 0.117 0.09375 0.118 0.09375 0.119 0.09375 0.12 0.09375 0.121 0.09375 0.122 0.09375 0.123 0.09375 0.124 0.09375 0.125 0.125 0.126 0.125 0.127 0.125 0.128 0.125 0.129 0.125 0.13 0.125 0.131 0.125 0.132 0.125 0.133 0.125 0.134 0.125 0.135 0.125 0.136 0.125 0.137 0.125 0.138 0.125 0.139 0.125 0.14 0.125 0.141 0.125 0.142 0.125 0.143 0.125 0.144 0.125 0.145 0.125 0.146 0.125 0.147 0.125 0.148 0.125 0.149 0.125 0.15 0.125 0.151 0.125 0.152 0.125 0.153 0.125 0.154 0.125 0.155 0.125 0.156 0.125 0.157 0.125 0.158 0.125 0.159 0.125 0.16 0.125 0.161 0.125 0.162 0.125 0.163 0.125 0.164 0.125 0.165 0.125 0.166 0.125 0.167 0.125 0.168 0.125 0.169 0.125 0.17 0.125 0.171 0.125 0.172 0.125 0.173 0.125 0.174 0.125 0.175 0.125 0.176 0.125 0.177 0.125 0.178 0.125 0.179 0.125 0.18 0.125 0.181 0.125 0.182 0.125 0.183 0.125 0.184 0.125 0.185 0.125 0.186 0.125 0.187 0.125 0.188 0.1875 0.189 0.1875 0.19 0.1875 0.191 0.1875 0.192 0.1875 0.193 0.1875 0.194 0.1875 0.195 0.1875 0.196 0.1875 0.197 0.1875 0.198 0.1875 0.199 0.1875 0.2 0.1875 0.201 0.1875 0.202 0.1875 0.203 0.1875 0.204 0.1875 0.205 0.1875 0.206 0.1875 0.207 0.1875 0.208 0.1875 0.209 0.1875 0.21 0.1875 0.211 0.1875 0.212 0.1875 0.213 0.1875 0.214 0.1875 0.215 0.1875 0.216 0.1875 0.217 0.1875 0.218 0.1875 0.219 0.1875 0.22 0.1875 0.221 0.1875 0.222 0.1875 0.223 0.1875 0.224 0.1875 0.225 0.1875 0.226 0.1875 0.227 0.1875 0.228 0.1875 0.229 0.1875 0.23 0.1875 0.231 0.1875 0.232 0.1875 0.233 0.1875 0.234 0.1875 0.235 0.1875 0.236 0.1875 0.237 0.1875 0.238 0.1875 0.239 0.1875 0.24 0.1875 0.241 0.1875 0.242 0.1875 0.243 0.1875 0.244 0.1875 0.245 0.1875 0.246 0.1875 0.247 0.1875 0.248 0.1875 0.249 0.1875 0.25 0.25 0.251 0.25 0.252 0.25 0.253 0.25 0.254 0.25 0.255 0.25 0.256 0.25 0.257 0.25 0.258 0.25 0.259 0.25 0.26 0.25 0.261 0.25 0.262 0.25 0.263 0.25 0.264 0.25 0.265 0.25 0.266 0.25 0.267 0.25 0.268 0.25 0.269 0.25 0.27 0.25 0.271 0.25 0.272 0.25 0.273 0.25 0.274 0.25 0.275 0.25 0.276 0.25 0.277 0.25 0.278 0.25 0.279 0.25 0.28 0.25 0.281 0.25 0.282 0.25 0.283 0.25 0.284 0.25 0.285 0.25 0.286 0.25 0.287 0.25 0.288 0.25 0.289 0.25 0.29 0.25 0.291 0.25 0.292 0.25 0.293 0.25 0.294 0.25 0.295 0.25 0.296 0.25 0.297 0.25 0.298 0.25 0.299 0.25 0.3 0.25 0.301 0.25 0.302 0.25 0.303 0.25 0.304 0.25 0.305 0.25 0.306 0.25 0.307 0.25 0.308 0.25 0.309 0.25 0.31 0.25 0.311 0.25 0.312 0.25 0.313 0.25 0.314 0.25 0.315 0.25 0.316 0.25 0.317 0.25 0.318 0.25 0.319 0.25 0.32 0.25 0.321 0.25 0.322 0.25 0.323 0.25 0.324 0.25 0.325 0.25 0.326 0.25 0.327 0.25 0.328 0.25 0.329 0.25 0.33 0.25 0.331 0.25 0.332 0.25 0.333 0.25 0.334 0.25 0.335 0.25 0.336 0.25 0.337 0.25 0.338 0.25 0.339 0.25 0.34 0.25 0.341 0.25 0.342 0.25 0.343 0.25 0.344 0.25 0.345 0.25 0.346 0.25 0.347 0.25 0.348 0.25 0.349 0.25 0.35 0.25 0.351 0.25 0.352 0.25 0.353 0.25 0.354 0.25 0.355 0.25 0.356 0.25 0.357 0.25 0.358 0.25 0.359 0.25 0.36 0.25 0.361 0.25 0.362 0.25 0.363 0.25 0.364 0.25 0.365 0.25 0.366 0.25 0.367 0.25 0.368 0.25 0.369 0.25 0.37 0.25 0.371 0.25 0.372 0.25 0.373 0.25 0.374 0.25 0.375 0.375 0.376 0.375 0.377 0.375 0.378 0.375 0.379 0.375 0.38 0.375 0.381 0.375 0.382 0.375 0.383 0.375 0.384 0.375 0.385 0.375 0.386 0.375 0.387 0.375 0.388 0.375 0.389 0.375 0.39 0.375 0.391 0.375 0.392 0.375 0.393 0.375 0.394 0.375 0.395 0.375 0.396 0.375 0.397 0.375 0.398 0.375 0.399 0.375 0.4 0.375 0.401 0.375 0.402 0.375 0.403 0.375 0.404 0.375 0.405 0.375 0.406 0.375 0.407 0.375 0.408 0.375 0.409 0.375 0.41 0.375 0.411 0.375 0.412 0.375 0.413 0.375 0.414 0.375 0.415 0.375 0.416 0.375 0.417 0.375 0.418 0.375 0.419 0.375 0.42 0.375 0.421 0.375 0.422 0.375 0.423 0.375 0.424 0.375 0.425 0.375 0.426 0.375 0.427 0.375 0.428 0.375 0.429 0.375 0.43 0.375 0.431 0.375 0.432 0.375 0.433 0.375 0.434 0.375 0.435 0.375 0.436 0.375 0.437 0.375 0.438 0.375 0.439 0.375 0.44 0.375 0.441 0.375 0.442 0.375 0.443 0.375 0.444 0.375 0.445 0.375 0.446 0.375 0.447 0.375 0.448 0.375 0.449 0.375 0.45 0.375 0.451 0.375 0.452 0.375 0.453 0.375 0.454 0.375 0.455 0.375 0.456 0.375 0.457 0.375 0.458 0.375 0.459 0.375 0.46 0.375 0.461 0.375 0.462 0.375 0.463 0.375 0.464 0.375 0.465 0.375 0.466 0.375 0.467 0.375 0.468 0.375 0.469 0.375 0.47 0.375 0.471 0.375 0.472 0.375 0.473 0.375 0.474 0.375 0.475 0.375 0.476 0.375 0.477 0.375 0.478 0.375 0.479 0.375 0.48 0.375 0.481 0.375 0.482 0.375 0.483 0.375 0.484 0.375 0.485 0.375 0.486 0.375 0.487 0.375 0.488 0.375 0.489 0.375 0.49 0.375 0.491 0.375 0.492 0.375 0.493 0.375 0.494 0.375 0.495 0.375 0.496 0.375 0.497 0.375 0.498 0.375 0.499 0.375 0.5 0.5 0.501 0.5 0.502 0.5 0.503 0.5 0.504 0.5 0.505 0.5 0.506 0.5 0.507 0.5 0.508 0.5 0.509 0.5 0.51 0.5 0.511 0.5 0.512 0.5 0.513 0.5 0.514 0.5 0.515 0.5 0.516 0.5 0.517 0.5 0.518 0.5 0.519 0.5 0.52 0.5 0.521 0.5 0.522 0.5 0.523 0.5 0.524 0.5 0.525 0.5 0.526 0.5 0.527 0.5 0.528 0.5 0.529 0.5 0.53 0.5 0.531 0.5 0.532 0.5 0.533 0.5 0.534 0.5 0.535 0.5 0.536 0.5 0.537 0.5 0.538 0.5 0.539 0.5 0.54 0.5 0.541 0.5 0.542 0.5 0.543 0.5 0.544 0.5 0.545 0.5 0.546 0.5 0.547 0.5 0.548 0.5 0.549 0.5 0.55 0.5 0.551 0.5 0.552 0.5 0.553 0.5 0.554 0.5 0.555 0.5 0.556 0.5 0.557 0.5 0.558 0.5 0.559 0.5 0.56 0.5 0.561 0.5 0.562 0.5 0.563 0.5 0.564 0.5 0.565 0.5 0.566 0.5 0.567 0.5 0.568 0.5 0.569 0.5 0.57 0.5 0.571 0.5 0.572 0.5 0.573 0.5 0.574 0.5 0.575 0.5 0.576 0.5 0.577 0.5 0.578 0.5 0.579 0.5 0.58 0.5 0.581 0.5 0.582 0.5 0.583 0.5 0.584 0.5 0.585 0.5 0.586 0.5 0.587 0.5 0.588 0.5 0.589 0.5 0.59 0.5 0.591 0.5 0.592 0.5 0.593 0.5 0.594 0.5 0.595 0.5 0.596 0.5 0.597 0.5 0.598 0.5 0.599 0.5 0.6 0.5 0.601 0.5 0.602 0.5 0.603 0.5 0.604 0.5 0.605 0.5 0.606 0.5 0.607 0.5 0.608 0.5 0.609 0.5 0.61 0.5 0.611 0.5 0.612 0.5 0.613 0.5 0.614 0.5 0.615 0.5 0.616 0.5 0.617 0.5 0.618 0.5 0.619 0.5 0.62 0.5 0.621 0.5 0.622 0.5 0.623 0.5 0.624 0.5 0.625 0.5 0.626 0.5 0.627 0.5 0.628 0.5 0.629 0.5 0.63 0.5 0.631 0.5 0.632 0.5 0.633 0.5 0.634 0.5 0.635 0.5 0.636 0.5 0.637 0.5 0.638 0.5 0.639 0.5 0.64 0.5 0.641 0.5 0.642 0.5 0.643 0.5 0.644 0.5 0.645 0.5 0.646 0.5 0.647 0.5 0.648 0.5 0.649 0.5 0.65 0.5 0.651 0.5 0.652 0.5 0.653 0.5 0.654 0.5 0.655 0.5 0.656 0.5 0.657 0.5 0.658 0.5 0.659 0.5 0.66 0.5 0.661 0.5 0.662 0.5 0.663 0.5 0.664 0.5 0.665 0.5 0.666 0.5 0.667 0.5 0.668 0.5 0.669 0.5 0.67 0.5 0.671 0.5 0.672 0.5 0.673 0.5 0.674 0.5 0.675 0.5 0.676 0.5 0.677 0.5 0.678 0.5 0.679 0.5 0.68 0.5 0.681 0.5 0.682 0.5 0.683 0.5 0.684 0.5 0.685 0.5 0.686 0.5 0.687 0.5 0.688 0.5 0.689 0.5 0.69 0.5 0.691 0.5 0.692 0.5 0.693 0.5 0.694 0.5 0.695 0.5 0.696 0.5 0.697 0.5 0.698 0.5 0.699 0.5 0.7 0.5 0.701 0.5 0.702 0.5 0.703 0.5 0.704 0.5 0.705 0.5 0.706 0.5 0.707 0.5 0.708 0.5 0.709 0.5 0.71 0.5 0.711 0.5 0.712 0.5 0.713 0.5 0.714 0.5 0.715 0.5 0.716 0.5 0.717 0.5 0.718 0.5 0.719 0.5 0.72 0.5 0.721 0.5 0.722 0.5 0.723 0.5 0.724 0.5 0.725 0.5 0.726 0.5 0.727 0.5 0.728 0.5 0.729 0.5 0.73 0.5 0.731 0.5 0.732 0.5 0.733 0.5 0.734 0.5 0.735 0.5 0.736 0.5 0.737 0.5 0.738 0.5 0.739 0.5 0.74 0.5 0.741 0.5 0.742 0.5 0.743 0.5 0.744 0.5 0.745 0.5 0.746 0.5 0.747 0.5 0.748 0.5 0.749 0.5 0.75 0.75 0.751 0.75 0.752 0.75 0.753 0.75 0.754 0.75 0.755 0.75 0.756 0.75 0.757 0.75 0.758 0.75 0.759 0.75 0.76 0.75 0.761 0.75 0.762 0.75 0.763 0.75 0.764 0.75 0.765 0.75 0.766 0.75 0.767 0.75 0.768 0.75 0.769 0.75 0.77 0.75 0.771 0.75 0.772 0.75 0.773 0.75 0.774 0.75 0.775 0.75 0.776 0.75 0.777 0.75 0.778 0.75 0.779 0.75 0.78 0.75 0.781 0.75 0.782 0.75 0.783 0.75 0.784 0.75 0.785 0.75 0.786 0.75 0.787 0.75 0.788 0.75 0.789 0.75 0.79 0.75 0.791 0.75 0.792 0.75 0.793 0.75 0.794 0.75 0.795 0.75 0.796 0.75 0.797 0.75 0.798 0.75 0.799 0.75 0.8 0.75 0.801 0.75 0.802 0.75 0.803 0.75 0.804 0.75 0.805 0.75 0.806 0.75 0.807 0.75 0.808 0.75 0.809 0.75 0.81 0.75 0.811 0.75 0.812 0.75 0.813 0.75 0.814 0.75 0.815 0.75 0.816 0.75 0.817 0.75 0.818 0.75 0.819 0.75 0.82 0.75 0.821 0.75 0.822 0.75 0.823 0.75 0.824 0.75 0.825 0.75 0.826 0.75 0.827 0.75 0.828 0.75 0.829 0.75 0.83 0.75 0.831 0.75 0.832 0.75 0.833 0.75 0.834 0.75 0.835 0.75 0.836 0.75 0.837 0.75 0.838 0.75 0.839 0.75 0.84 0.75 0.841 0.75 0.842 0.75 0.843 0.75 0.844 0.75 0.845 0.75 0.846 0.75 0.847 0.75 0.848 0.75 0.849 0.75 0.85 0.75 0.851 0.75 0.852 0.75 0.853 0.75 0.854 0.75 0.855 0.75 0.856 0.75 0.857 0.75 0.858 0.75 0.859 0.75 0.86 0.75 0.861 0.75 0.862 0.75 0.863 0.75 0.864 0.75 0.865 0.75 0.866 0.75 0.867 0.75 0.868 0.75 0.869 0.75 0.87 0.75 0.871 0.75 0.872 0.75 0.873 0.75 0.874 0.75 0.875 0.75 0.876 0.75 0.877 0.75 0.878 0.75 0.879 0.75 0.88 0.75 0.881 0.75 0.882 0.75 0.883 0.75 0.884 0.75 0.885 0.75 0.886 0.75 0.887 0.75 0.888 0.75 0.889 0.75 0.89 0.75 0.891 0.75 0.892 0.75 0.893 0.75 0.894 0.75 0.895 0.75 0.896 0.75 0.897 0.75 0.898 0.75 0.899 0.75 0.9 0.75 0.901 0.75 0.902 0.75 0.903 0.75 0.904 0.75 0.905 0.75 0.906 0.75 0.907 0.75 0.908 0.75 0.909 0.75 0.91 0.75 0.911 0.75 0.912 0.75 0.913 0.75 0.914 0.75 0.915 0.75 0.916 0.75 0.917 0.75 0.918 0.75 0.919 0.75 0.92 0.75 0.921 0.75 0.922 0.75 0.923 0.75 0.924 0.75 0.925 0.75 0.926 0.75 0.927 0.75 0.928 0.75 0.929 0.75 0.93 0.75 0.931 0.75 0.932 0.75 0.933 0.75 0.934 0.75 0.935 0.75 0.936 0.75 0.937 0.75 0.938 0.75 0.939 0.75 0.94 0.75 0.941 0.75 0.942 0.75 0.943 0.75 0.944 0.75 0.945 0.75 0.946 0.75 0.947 0.75 0.948 0.75 0.949 0.75 0.95 0.75 0.951 0.75 0.952 0.75 0.953 0.75 0.954 0.75 0.955 0.75 0.956 0.75 0.957 0.75 0.958 0.75 0.959 0.75 0.96 0.75 0.961 0.75 0.962 0.75 0.963 0.75 0.964 0.75 0.965 0.75 0.966 0.75 0.967 0.75 0.968 0.75 0.969 0.75 0.97 0.75 0.971 0.75 0.972 0.75 0.973 0.75 0.974 0.75 0.975 0.75 0.976 0.75 0.977 0.75 0.978 0.75 0.979 0.75 0.98 0.75 0.981 0.75 0.982 0.75 0.983 0.75 0.984 0.75 0.985 0.75 0.986 0.75 0.987 0.75 0.988 0.75 0.989 0.75 0.99 0.75 0.991 0.75 0.992 0.75 0.993 0.75 0.994 0.75 0.995 0.75 0.996 0.75 0.997 0.75 0.998 0.75 0.999 0.75