好的,我有一個我的Trig類,用於存儲值的靜態表,以便更快地執行我的程序中的sin,cos和tan函數。是否有任何意見和/或速度的改進,可以對我目前的方法?由於之前的答案,我已經感覺C++更勝任了。可能的代碼速度優化?
Trig.h
#pragma once
#include <math.h>
class Trig
{
private:
struct Table
{
static const int multiple = 10; // Accurately stores values to 1/10 of a degree
double sin[360*multiple];
Table();
};
static const Table table;
static void shrinkRange(double*); // Shrinks degrees to range 0-359 for proper array indexing
public:
static double sin(double);
static double cos(double);
static double tan(double);
};
Trig.cpp
#include "Trig.h"
Trig::Table::Table() // table constructor
{
double const PI = 3.14159265358979323;
double const degToRad = PI/180.0;
double const incr = 1.0/multiple;
int index = 0;
for (double angle = 0; index != 360*table.multiple; angle += incr)
Table::sin[index++] = _INC_MATH::sin(angle*degToRad);
}
Trig::Table const Trig::table; // initialize static table member
void Trig::shrinkRange(double* degrees)
{
if (*degrees >= 360)
*degrees -= 360*((int)*degrees/360);
if (*degrees < 0)
*degrees += 360*(-(int)*degrees/360 + 1);
}
double Trig::sin(double degrees)
{
shrinkRange(°rees);
degrees *= table.multiple;
return Trig::table.sin[(int)(degrees+0.5)];
}
double Trig::cos(double degrees)
{
return Trig::sin(degrees + 90);
}
double Trig::tan(double degrees)
{
return Trig::sin(degrees)/Trig::cos(degrees);
}
這不是Java。它是'Trig :: createTable'。 –
這是基本的C++語法。我建議獲得[一本好書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 (嘗試'Trig :: createTable()') –
編輯現有的封閉式題外話題是毫無意義的,因爲它與主題等原始問題沒有關係。因此,您可能想要問一個新問題。 –