## Publications and other writing

## Publications

## Introduction to Intel AVX

Apr 2011

This article (1.5MB PDF) is an introduction to Intel's Advanced
Vector Extensions (AVX), written for their developer network.
It covers the new registers, feature detection, assembler and compiler
support, and an example using C++ intrisics. The appendix is a brief listing
of all the AVX functions.
Here is the C++ project described in the article (10MB zipfile).

## A Simple Fast Fourier Transform

Jan 2010

This article (600kb PDF) presents a free, simple, fast Fast
Fourier Transform
in C#. It derives the code and explains the FFT in detail. It also presents a real to complex FFT useful for many
engineering tasks which has the advantage
of being twice as fast and uses half the resources as a traditional FFT. Source code is available in
C# or
HTML view.

## Introduction to x64 Assembly

Dec 2009

This article (364kb PDF)
is a thorough introduction to x64 assembly programming. It covers the
register set including a little about MMX and various SSE versions. A few
assemblers are listed with details on MASM (ML64.exe). Instruction basics
are then followed by examples for interfacing with Visual Studio C/C++. One
particularly useful part is details for calling conventions for x64 .

This article appears on the
Intel Software Network.

## Secure Channel Communications

Dec 2009

This article (138kb PDF)
covers the basics of secure communication for video game programming, and
appears in
Game Programming Gems 8 [amazon.com].

## Excel 2007 bug analysis

Oct 2007

This article (500kb PDF) details the Excel 2007 formatting bug.
On initial release, entering =850*77.1 in a cell results in 10000, instead of the correct 65535. This article shows
this bug is the result of porting 16-bit code to 32-bit code, and shows why exactly 12 values of the possible
9*10^18 64-bit floating-point values are affected. See this page for more
details.

## Subdivision Surfaces

July 2007

Subdivision surfaces are a method of representing smooth surfaces using a coarser polygon mesh, often used for
storing and generating high detail geometry (usually dynamically) from low detail meshes coupled with various scalar
maps. They have become popular in modeling and animation tools due to their ease of use, support for
multi-resolution editing, ability to model arbitrary topology, and numerical robustness. This article presents
enough detail about a specific subdivision method for direct implementation. The main result is a complete set of
subdivision rules for geometry, texture, and other attributes. A second result is an overview of methods for fast
generation and rendering.

Paper (254 KB PDF)

## Random number generation

July 2007

This article is an introduction to random number generators (RNGs). The main goal is to

present a starting point for programmers needing to make decisions about RNG choice

and implementation. A second goal is to present better alternatives for the ubiquitous

Mersenne Twister (MT). A final goal is to cover various classes of random number

generators, providing strengths and weaknesses of each.

Paper (136 KB PDF)

## Floating Point Tricks

Aug 2005

This survey article on floating points tricks covers many speedups possible using IEEE 754 floating-point
values. These are useful for high-performance needs, like video game programming, ray-tracing, sound processing,
etc.
Items covered include very fast inverse square roots, square roots, base 2 logarithms, accurate and fast
comparisons, and more.
In particular the article is designed to teach programmers the details of how to derive their own such tricks when
needed.
This article was selected to appear in the book Games Programming Gems 6, to be published early 2006. See my software page for the source code.

Coming in Games Programming Gems 6, 2006.

## Taming the Floating Point Beast

May 2005

Comparing floating point numbers for near equality has been a
well discussed topic. This note covers the relevant points, and then introduces a
few new, robust, high performance ways to do these comparisons. Applications
range from realtime raytracing to video games to CAD systems. In particular
branchless comparisons are designed which are faster than previous methods
with no loss of numerical quality.

Soon to be placed on arxiv.

## The Hidden Subgroup Problem - Review and Open Problems

Oct 2004

An overview of quantum computing and in particular the Hidden
Subgroup Problem (HSP) is presented from a mathematical viewpoint. Detailed
proofs are supplied for many important results and notation
is unified, making it easier to absorb the background necessary to begin
research on the HSP. Some errors in previous proofs are corrected. Proofs are provided which give
very concrete algorithms and bounds for the finite abelian case with little outside
references, and future directions are provided for the nonabelian case.
This summary is current as of October 2004. 83 pages.

## Angelic and Evil Numbers

Oct 2004

This brief note answers a question posed on Ed Pegg's website www.mathpuzzle.com
on Sept 20, 2004, regarding the likelihood that a randomly chosen irrational number has initial digits summing to a
specified constant. In
particular, different people noticed that when you add the digits of pi after the decimal, you eventually reach 666.
Such numbers I termed
"Evil." Those reaching 7 before 666 I termed "Angelic." I obtain a recurrence and a generating
function that allows exact computation these such
probabilities, and conjecture the probability converges to 20% of hitting a given large digit sum. The results were
jointly written up
with columnist Ed Pegg for the October 2004 MAA Online column "Math Games."

Published in Oct 2004 MAA Online column "Math Games."

MAA Article

## Using geometric algebra for computer graphics

Aug 2004

In this article I show how to use Clifford Algebras to simplify algorithm derivation. In particular, the elegant
framework
given using "geometric algebra" unites complex numbers, rotations in any
dimension (including quaternions), and gives a nice way to view geometric
entities like intersection and span. One useful application is it makes code much simpler. Related
papers are on this website here.

## A Quantum Fourier Transform Algorithm

April 2004

An algorithm is presented showing how to do quantum Fourier transforms over a cyclic group, which can then be used
to perform a QFT over any finite abelian group. This corrects results published in several places.

## Robust String Matching in O(\sqrt{N}+M) Quantum Queries

Oct 2003

A quantum algorithm to match strings, supporting wildcards.
However, there is a fatal error, and I have withdrawn the paper. It still has
some value since it summarizes many theorems from other places, and presents a
different view of complexity for some problems. In particular, it reiterates that
Grover's algorithm has query complexity of O(sqrt(N)) but time complexity O(log N sqrt(N)),
a point many authors confuse.

## Quantum convolution and correlation are physically impossible

Sept 2003

In this paper I show that performing convolution or correlation
of quantum states is physically impossible on a quantum computer. Since the
Fourier transform is exponentially faster on quantum states, and the operations
are related, it seems natural to ask if all three transforms can be performed efficiently.
However the FT is unitary, a necessity, while convolution and correlation are
not, making them impossible.

## Quantum Circuit Identities

July 2003

Constructing a quantum computer out of basic gates is a
challenge in quantum computation. Depending on the basic gate set allowed, other
desired operations can be performed as combinations of these gates. In this
paper I construct all simple (up to 4 gate) identities resulting from a common
basic set.

## Error Correcting Codes on Algebraic Surfaces

May 2003

This is my Purdue PhD math thesis which constructs families of
codes on algebraic surfaces. In particular I analyze the codes resulting from
vector bundles over ruled surfaces over curves of genus 0 and 1, using extensions
of Atiyah's classification of vector bundles over elliptic curves.

## Yet more Projective Curves over F_{2}

Jan 2001

An exhaustive search is done over all plane curves of degree
6 or less with coefficients in F_2, and the number of rational points on the
smooth model of each curve is counted over the finite fields of order 2^m for
m=1,2,...11. This results in some new curves with more rational points than
were previously known, giving data for better error correcting codes and for
testing new bounds similar to Weil's formulas on the bounds for rational
points on varieties.

Updated Apr 2002 - new version

## Talks

## Space + Time = Spacetime

August 2011

These are notes on a talk I gave to a group of engineers showing a simple derivation of the Lorenz transform. The
goal
was to show that just by assuming the speed of light is constant for all observers that space and time must be
intertwined in a manner similar
to a rotation of the 2D plane. The resulting derivation is short, simple, and complete. Experimental evidence is
listed to show how the theory
matches experiment.

## What is Math good for?

April 2011

These are slides for the the Don Buckeye talk I gave at Eastern Michigan University to a group of faculty and
students. The topic was
showing how a common device (I chose an iPhone for the concrete example) requires sophisticated mathematics to
design and implement. I showed how each math class that an undergrad could take
and even many graduate courses are required to cover the full breadth of technologies. Here is a link to the PPT
slides (including many I did not have time to show).

## An Exceptionally Simple Theory of Everything

April 2010

These are slides for a talk I originally gave at Cybernet in April 2010.
The talk is motiviated by Garret Lisi's "An Exceptionally Simple Theory of
Everything" and covers enough background to motivate the abstract to a
non-physicist audience, as long as they are still somewhat mathematically
sophisticated. The original presentation was to a group of engineers working
in many fields from mechanical, electrical, and computer science, and was
well received. The talk took three 1-hour sessions to cover the material.

## C# for C++ Programmers

July 2008

This is a talk I gave to Cybernet Systems in May 2008, showing how C# compares to C++, with the slant of why C#
will make them more productive with almost no loss in expressive power or performance for the tasks usually done in
C++.

## An Introduction to Special Relativity

Oct 2007

This is an introduction to special relativity, with a fair amount of historical and motivating material.
Highlights include derivation from simple concepts of the following: time dilation, length contraction, relativistic
mass, and the famous E=mc^{2}.

Note: much of the material and images for the slides were shamelessly stolen from the web. If anything used violates
any of your copyrights, let me know (fair use?).

## Mathematics and Insanity

This is a light talk I have given at an IPFW Math Alumni meeting. It is a talk about different mathematicians who
were "crazy" in various ways, not all of which were clinical. It was meant to give spouses of math people
in the audience some insight to their loved ones minds.

## Mathematics for Video Game Programming

Before my academic life I was a video game programmer, and am amazed how deep the required math is for modern video
game programming. Ths talk, meant to inspire undergraduates in mathematics and computer science to study hard,
covers most of an undergraduate cirriculum and the uses of each class in some area of game development. I have given
this talk probably a dozen times to many universities.

## Introduction to Quantum Computing

A talk designed for undergraduates to show a small sampling of quantum computing and how it came to be, and some
future directions. I was invited to talk to a group of students on quantum computing, and this was the result.

## Misc other writings

## A Pandigital Approximation to e Explored

Sept 2011

Here is a detailed exposition of how to prove
R. Sabey's 2004 pandigital
approximation (1+9^-(6*7))^3^(2^85) to e is accurate to 18457734525360901453873570 digits
(including the leading 2).

## A Beginner Exploits a Security Advisory

April 2007

Here is a detailed explanation and associated files for how I developed (as a beginner) an exploit for the
Microsoft ANI file vulnerability disclosed in Spring 2007.

Zipfile (193K) removed 2019

## C++ coding standards v1.0

Fall 2003

Here is a good set of C++ programming guidelines I developed from my own experience, that I wrote up for giving a
talk at Cybernet to the developers.

## Quantum computing lecture notes

Fall 2003

These lecture notes were made for a series of talks I gave at Purdue in the fall of 2003.

## Fast Inverse Square Root

Feb 2003

Here a fast algorithm is explained for doing inverse square
roots on IEEE floating point formats, which is slightly more accurate than the code
found on the web. In particular, the techniques explaining the magic
constant 0x5f3759df (search for this constant on Google) used by John Carmack in
the Quake 3 code are explained and improved.

Postscript and DVI available on request

## An Elementary Proof K3,3 is Non-Planar

Oct 2002

The common school kid puzzle of connecting three
utilities (water, gas, electric) to three houses in the plane is shown to be
impossible. After I wrote this I found out this proof is already known. Ah - that's
what I get for playing outside my areas of expertise.

## Solution to a hard integral problem.

April 2005

For a very challenging integration problem, solvable
with 3rd semester calculus, look to the textbook, “Calculus and Analytic Geometry”, 6th edition,
by

George B. Thomas and Ross L. Finney. The following
problem appears in section 16.7 on multiple
integration:

37. WARNING: Hard problem. Setting up the
integral is straightforward, but integrating the result
takes hours. (It took MACYSMA 20 minutes.)

A square hole of side length 2b is cut symmetrically
through a sphere of radius a (a > b * sqrt(2)). Find the
volume removed.

This is easy to set up - but try to integrate it using undergrad methods.... Very hard :)

## Deriving Fast Nonlinear Gradient Fills

Oct 2002

This is a tutorial on several areas in code and algorithm
optimization: namely polynomial approximation, Differential Digital Analysis (DDA),
forward differencing, and a few more. The tutorial shows how I used these
techniques to obtain a 20 fold performance increase in a simple nonlinear
gradient fill routine.

## Hartshorne Solutions version 1.0

2000-2001

While working through Hartshorne's book Algebraic Geometry I took the time to TeX some of the solutions. In an
imaginary world I would write up nice solutions to all 400+ problems, but on planet Earth I have moved on and no
longer have time.
Solutions are presented for some problems in chapters I,II,III,IV.