Re: writing an external function in std c++
In message
<bcf7a69f-fe17-42ac-bc8a-11da4622cb75@s13g2000prd.googlegroups.com>,
peter koch <peter.koch.larsen@gmail.com> writes
On 18 Feb., 06:41, "Gerry Ford" <inva...@invalid.net> wrote:
I've been pecking away at writing a program that will calculate the inner
product of two double-width four-vectors.
Why? There are libraries that do this better than you or I could
reasonably hope to do unless we really took the time (and perhaps even
then! ;-)).
I am quite sure of that even if I don't really know what double-width
and four-vector is. These are neither terms of C++ nor of mathematics.
"Four-vector" is a standard term in relativistic physics.
Larry thinks I'm well started with the following source to populate a
vector:
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <math.h>
int main() {
std::vector<double> four_vector;
for (double i=0.0; i<4.0; i++)
four_vector.push_back(sqrt(i));
This loop is really dangerous. You risk having five elements in your
vector.
With probability approaching zero. I doubt if there are _any_
floating-point implementations where a double can't exactly represent
all integers up to some value considerably larger than a 32-bit int, and
perform exact arithmetic on them. Even a float can count up to 4 without
error.
Also it is inefficient as you (presumably!) know that there
should be four elements in the vector.
_Measurably_ inefficient?
Use reserve
You really think it will help? The very first push_back will do
something internally equivalent to reserve(N) for some N which quite
likely exceeds 4.
or prefer a fixed-size vector which imo is the best
solution provided that you will always have a fixed number of elements
in your vector.
There may well be a good argument for having a dedicated class
representing four-vectors, but this isn't it.
--
Richard Herring