Difference between revisions of "Main Page"

From Dirks Personal WiKi
m
m
Line 29: Line 29:
 
The following is some code which has been suggested, to compute the reciprocal square root using a trick. It may not be helpful, because this code requires that the language implementation can already convert a floating-point number into its 64-bit representation.
 
The following is some code which has been suggested, to compute the reciprocal square root using a trick. It may not be helpful, because this code requires that the language implementation can already convert a floating-point number into its 64-bit representation.
   
<syntaxhighlight lang="cpp">
+
<syntaxhighlight lang="c++">
 
/* Fast Inverse Square Root, using Matthew Robertson's
 
/* Fast Inverse Square Root, using Matthew Robertson's
 
* Magic Number for double-precision floating-point.
 
* Magic Number for double-precision floating-point.

Revision as of 00:13, 31 August 2024

This is a personal MediaWiki.

The User's Guide will explain how to use the WiKi software, to Dirk.

Getting started

Eq 1 &em;&em; [math]\displaystyle{ y=\pm\sqrt{1-x^{2}} }[/math] &em;&em;&em;&em; (Equation for circle.)

Drop-Down Menu
  • [[Plastic Widgets]]
  • [[Framistans]]
  • [[Pet Rocks]]
  • Eq 1

The following is a hypothetical exercise...

A cartoon centipede reads books and types on a laptop.
The Wikipede edits wikipedia:Myriapoda.

This example is supposed to show how thumbnails can be made to display by default, as well as how inter-WiKi links work.


The following is some code which has been suggested, to compute the reciprocal square root using a trick. It may not be helpful, because this code requires that the language implementation can already convert a floating-point number into its 64-bit representation.

/*  Fast Inverse Square Root, using Matthew Robertson's
 * Magic Number for double-precision floating-point.
 * 
 * Implemented August 2, 2024
 * by Dirk Mittler
 * 
 */

#include <cstring>
#include <cstdint>

typedef double float64_t;

float64_t Q_rsqrt(const float64_t number) noexcept {
	const float64_t threehalfs = 1.5;
	const float64_t halfnum = 0.5 * number;
	uint64_t temp;
	float64_t y;
	static_assert(sizeof(uint64_t) == sizeof(number),
					"`double` has a weird size.");
	memcpy(&temp, &number, sizeof(float64_t));
//	temp = 0x5f3759df - (temp >> 1);	// Original 32-bit fr Quake III
	temp = 0x5FE6EB50C7B537A9 - (temp >> 1);	// Matthew Robertson's
	memcpy(&y, &temp, sizeof(float64_t));
	y *= (threehalfs - (halfnum * y * y));
	y *= (threehalfs - (halfnum * y * y));
	y *= (threehalfs - (halfnum * y * y));
	return y * (threehalfs - (halfnum * y * y));
}