From 817406f3427f19f9568c81e9cefa32a1a83fad7c Mon Sep 17 00:00:00 2001
From: Oliver Bock <oliver.bock@aei.mpg.de>
Date: Thu, 5 Feb 2009 11:30:37 +0100
Subject: [PATCH] Just to be on the safe side

* Use double precision
* No explicit float literals
---
 src/pulsaranimationwidget.cpp | 177 +++++++++++++++++-----------------
 src/pulsaranimationwidget.h   |  40 ++++----
 src/pulsatingscience.cpp      |  32 +++---
 src/pulsescopewidget.cpp      |  20 ++--
 src/pulsescopewidget.h        |  10 +-
 5 files changed, 138 insertions(+), 141 deletions(-)

diff --git a/src/pulsaranimationwidget.cpp b/src/pulsaranimationwidget.cpp
index 7246b24..a35baeb 100644
--- a/src/pulsaranimationwidget.cpp
+++ b/src/pulsaranimationwidget.cpp
@@ -20,12 +20,12 @@
 
 #include "pulsaranimationwidget.h"
 
-const float PulsarAnimationWidget::deg2rad = PI/180.0f;
+const double PulsarAnimationWidget::deg2rad = PI/180.0;
 
 PulsarAnimationWidget::PulsarAnimationWidget(QWidget *parent) :
 	QGLWidget(QGLFormat(QGL::AlphaChannel | QGL::SampleBuffers), parent),
 	m_frameTimer(),
-	m_pulseProfile(360, 0.0f)
+	m_pulseProfile(360, 0.0)
 {
 	if(!format().directRendering()) {
 		qWarning("Sorry, no direct rendering support for animation...");
@@ -62,20 +62,20 @@ PulsarAnimationWidget::PulsarAnimationWidget(QWidget *parent) :
 
 	// initial render timing settings
 	m_framesPerSecond = 25;
-	m_pulsarRotationDelta = 0.0f;
-	m_orbitRotationDelta = 0.0f;
+	m_pulsarRotationDelta = 0.0;
+	m_orbitRotationDelta = 0.0;
 	resetParameters();
 
 	// initial binary system parameters (have to match GUI!)
-	m_pulsarMass = 1.4f;
+	m_pulsarMass = 1.4;
 	// initial companion is "Neutron Star"
-	m_companionMass = 1.4f;
-	m_pulsarSpinAxisInclination = 0.0f;
-	m_pulsarMagneticAxisInclination = 45.0f;
-	m_pulsarSemiMajorAxis = 5.0f;
+	m_companionMass = 1.4;
+	m_pulsarSpinAxisInclination = 0.0;
+	m_pulsarMagneticAxisInclination = 45.0;
+	m_pulsarSemiMajorAxis = 5.0;
 	m_companionSemiMajorAxis = (m_pulsarMass/m_companionMass) * m_pulsarSemiMajorAxis;
 	// initial spin frequency of 0.5 Hz
-	m_pulsarRotationDelta = (360.0f * 0.5f) / m_framesPerSecond;
+	m_pulsarRotationDelta = (360.0 * 0.5) / m_framesPerSecond;
 	// update orbital period (based on settings above)
 	updateOrbitPeriod();
 
@@ -85,10 +85,10 @@ PulsarAnimationWidget::PulsarAnimationWidget(QWidget *parent) :
 	m_cameraInteraction = false;
 
 	// initial view settings
-	m_mouseAngleH = 90.0f;
-	m_mouseAngleV = 30.0f;
-	m_cameraZoom = 15.0f;
-	m_cameraZoomLBound = 2.0f;
+	m_mouseAngleH = 90.0;
+	m_mouseAngleV = 30.0;
+	m_cameraZoom = 15.0;
+	m_cameraZoomLBound = 2.0;
 	m_mouseLastX = 0;
 	m_mouseLastY = 0;
 
@@ -117,18 +117,18 @@ PulsarAnimationWidget::~PulsarAnimationWidget()
 void PulsarAnimationWidget::initializeGL()
 {
 	glClearColor(0.0, 0.0, 0.0, 0.0);
-	glClearDepth(1.0f);
+	glClearDepth(1.0);
 	glDepthFunc(GL_LEQUAL);
 	glEnable(GL_DEPTH_TEST);
 
 	glShadeModel(GL_SMOOTH);
 	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
 
-	GLfloat LightAmbient[] = { 0.3f, 0.3f, 0.3f, 1.0f };
-	GLfloat LightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
-	GLfloat LightSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
-	GLfloat LightPosition[] = { 0.0f, 0.0f, 3.0f, 1.0f };
-	GLfloat spot_direction[] = { 0.0, 0.0, -1.0 };
+	GLfloat LightAmbient[] = {0.3, 0.3, 0.3, 1.0};
+	GLfloat LightDiffuse[] = {1.0, 1.0, 1.0, 1.0};
+	GLfloat LightSpecular[] = {1.0, 1.0, 1.0, 1.0};
+	GLfloat LightPosition[] = {0.0, 0.0, 3.0, 1.0};
+	GLfloat spot_direction[] = {0.0, 0.0, -1.0};
 
 	glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);
 	glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
@@ -184,7 +184,7 @@ void PulsarAnimationWidget::resizeGL(int w, int h)
 	glMatrixMode(GL_PROJECTION);
 	glLoadIdentity();
 
-	gluPerspective(45.0f, (GLfloat)w / (GLfloat)h, 0.1f, 500.0f);
+	gluPerspective(45.0, (GLfloat)w / (GLfloat)h, 0.1, 500.0);
 
 	glMatrixMode(GL_MODELVIEW);
 	glLoadIdentity();
@@ -202,11 +202,11 @@ void PulsarAnimationWidget::paintGL()
 			  0.0, 1.0, 0.0);
 
 	// TODO: should be located elsewhere
-	static GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };
-	static GLfloat mat_diffuse[] = { 0.5, 0.5, 0.5, 1.0 };
-	static GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
-	static GLfloat low_shininess[] = { 2.5 };
-	static GLfloat translucent[] = { 1.0, 1.0, 1.0, 0.33 };
+	static GLfloat no_mat[] = {0.0, 0.0, 0.0, 1.0};
+	static GLfloat mat_diffuse[] = {0.5, 0.5, 0.5, 1.0};
+	static GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0};
+	static GLfloat low_shininess[] = {2.5};
+	static GLfloat translucent[] = {1.0, 1.0, 1.0, 0.33};
 
 	glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
 	glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
@@ -216,29 +216,29 @@ void PulsarAnimationWidget::paintGL()
 
 	// draw companion
 	glPushMatrix();
-		glTranslatef(sin((m_orbitRotationAngle + 180.0f) * deg2rad) * m_companionSemiMajorAxis,
-					 0.0f,
-					 cos((m_orbitRotationAngle + 180.0f) * deg2rad) * m_companionSemiMajorAxis);
-		gluSphere(m_quadricCompanion, 1.0f, 32, 32);
+		glTranslatef(sin((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis,
+					 0.0,
+					 cos((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis);
+		gluSphere(m_quadricCompanion, 1.0, 32, 32);
 	glPopMatrix();
 
 	// draw pulsar
 	glPushMatrix();
 		glTranslatef(sin(m_orbitRotationAngle * deg2rad) * m_pulsarSemiMajorAxis,
-					 0.0f,
+					 0.0,
 					 cos(m_orbitRotationAngle * deg2rad) * m_pulsarSemiMajorAxis);
 
 		glPushMatrix();
-			glRotatef(m_pulsarSpinAxisInclination, 0.0f, 0.0f, 1.0f);
-			glRotatef(m_pulsarRotationAngle, 0.0f, 1.0f, 0.0f);
+			glRotatef(m_pulsarSpinAxisInclination, 0.0, 0.0, 1.0);
+			glRotatef(m_pulsarRotationAngle, 0.0, 1.0, 0.0);
 
 			// draw spin axis
 			if(m_showRotationAxes) {
 				glPushMatrix();
 					glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent);
-					glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
-					glTranslatef(0.0f, 0.0f, -5.0f);
-					gluCylinder(m_quadricPulsarSpinAxis, 0.05f, 0.05f, 10.0f, 32, 1);
+					glRotatef(90.0, 1.0, 0.0, 0.0);
+					glTranslatef(0.0, 0.0, -5.0);
+					gluCylinder(m_quadricPulsarSpinAxis, 0.05, 0.05, 10.0, 32, 1);
 				glPopMatrix();
 			}
 
@@ -250,7 +250,7 @@ void PulsarAnimationWidget::paintGL()
 
 			glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
 			glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
-			gluSphere(m_quadricPulsar, 1.0f, 32, 32);
+			gluSphere(m_quadricPulsar, 1.0, 32, 32);
 
 			// disable texturing
 	        glDisable(GL_TEXTURE_GEN_S);
@@ -259,49 +259,49 @@ void PulsarAnimationWidget::paintGL()
 		glPopMatrix();
 
 		// TODO: should be located elsewhere
-		static GLfloat coneAmbient[] = { 1.0, 1.0, 0.0, 1.0 };
-		static GLfloat coneDiffuse[] = { 1.0, 1.0, 0.0, 1.0 };
-		static GLfloat coneSpecular[] = { 1.0, 1.0, 0.5, 1.0 };
+		static GLfloat coneAmbient[] = {1.0, 1.0, 0.0, 1.0};
+		static GLfloat coneDiffuse[] = {1.0, 1.0, 0.0, 1.0};
+		static GLfloat coneSpecular[] = {1.0, 1.0, 0.5, 1.0};
 
 		glMaterialfv(GL_FRONT, GL_SPECULAR, coneSpecular);
 
 		// first cone
 		glPushMatrix();
-			glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
-			glRotatef(m_pulsarSpinAxisInclination, 0.0f, 1.0f, 0.0f);
+			glRotatef(90.0, 1.0, 0.0, 0.0);
+			glRotatef(m_pulsarSpinAxisInclination, 0.0, 1.0, 0.0);
 
-			glRotatef(-m_pulsarRotationAngle - 90.0f, 0.0f, 0.0f, 1.0f);
-			glRotatef(-m_pulsarMagneticAxisInclination, 1.0f, 0.0f, 0.0f);
+			glRotatef(-m_pulsarRotationAngle - 90.0, 0.0, 0.0, 1.0);
+			glRotatef(-m_pulsarMagneticAxisInclination, 1.0, 0.0, 0.0);
 
 			// draw magnetic axis (for both cones)
 			if(m_showRotationAxes) {
 				glPushMatrix();
 					glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent);
-					glTranslatef(0.0f, 0.0f, -5.0f);
-					gluCylinder(m_quadricPulsarMagneticAxis, 0.05f, 0.05f, 10.0f, 32, 1);
+					glTranslatef(0.0, 0.0, -5.0);
+					gluCylinder(m_quadricPulsarMagneticAxis, 0.05, 0.05, 10.0, 32, 1);
 				glPopMatrix();
 			}
 
-			glTranslatef(0.0f, 0.0f, -4.0f);
+			glTranslatef(0.0, 0.0, -4.0);
 
 			glMaterialfv(GL_FRONT, GL_AMBIENT, coneAmbient);
 			glMaterialfv(GL_FRONT, GL_DIFFUSE, coneDiffuse);
-			gluCylinder(m_quadricPulsarCone1, 0.475f, 0.0f, 3.0f, 32, 32);
+			gluCylinder(m_quadricPulsarCone1, 0.475, 0.0, 3.0, 32, 32);
 		glPopMatrix();
 
 		// second cone
 		glPushMatrix();
-			glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
-			glRotatef(-m_pulsarSpinAxisInclination, 0.0f, 1.0f, 0.0f);
+			glRotatef(-90.0, 1.0, 0.0, 0.0);
+			glRotatef(-m_pulsarSpinAxisInclination, 0.0, 1.0, 0.0);
 
-			glRotatef(m_pulsarRotationAngle - 90.0f, 0.0f, 0.0f, 1.0f);
-			glRotatef(m_pulsarMagneticAxisInclination, 1.0f, 0.0f, 0.0f);
+			glRotatef(m_pulsarRotationAngle - 90.0, 0.0, 0.0, 1.0);
+			glRotatef(m_pulsarMagneticAxisInclination, 1.0, 0.0, 0.0);
 
-			glTranslatef(0.0f, 0.0f, -4.0f);
+			glTranslatef(0.0, 0.0, -4.0);
 
 			glMaterialfv(GL_FRONT, GL_AMBIENT, coneAmbient);
 			glMaterialfv(GL_FRONT, GL_DIFFUSE, coneDiffuse);
-			gluCylinder(m_quadricPulsarCone2, 0.475f, 0.0f, 3.0f, 32, 32);
+			gluCylinder(m_quadricPulsarCone2, 0.475, 0.0, 3.0, 32, 32);
 		glPopMatrix();
 	glPopMatrix();
 
@@ -309,15 +309,15 @@ void PulsarAnimationWidget::paintGL()
 	glMatrixMode(GL_PROJECTION);
 	glPushMatrix();
 	glLoadIdentity();
-	glOrtho(0, width(), 0, height(), 0.1f, 501.0f);
+	glOrtho(0, width(), 0, height(), 0.1, 501.0);
 	glMatrixMode(GL_MODELVIEW);
 	glPushMatrix();
 	glLoadIdentity();
 
 	// draw backdrop (independent parallel projection)
 	glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_specular);
-	glTranslatef(0.0f, 0.0f, -501.0f);
-	drawTexture(QPointF(0.0f, 0.0f), m_backgroundTexture);
+	glTranslatef(0.0, 0.0, -501.0);
+	drawTexture(QPointF(0.0, 0.0), m_backgroundTexture);
 
 	// restore original state
 	glMatrixMode(GL_PROJECTION);
@@ -329,18 +329,18 @@ void PulsarAnimationWidget::paintGL()
 	if(m_cameraInteraction || m_showOrbits) {
 		glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent);
 
-		static float sizeOffset = 0.25f;
+		static double sizeOffset = 0.25;
 
 		// companion's plane (only if not identical with pulsar's)
 		if(m_companionSemiMajorAxis != m_pulsarSemiMajorAxis) {
 			glPushMatrix();
-				glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
+				glRotatef(90.0, 1.0, 0.0, 0.0);
 
 				// separate them slightly in case of overlap
 				// based on ugly mass diff check (no collision detection)
 				// single known problematic pair: (m_c=1.4, m_p=1.5)
-				if((int)(10*(m_pulsarMass-m_companionMass)+0.5f) == 1){
-					glTranslatef(0.0f, 0.0f, 0.01f);
+				if((int)(10*(m_pulsarMass-m_companionMass)+0.5) == 1){
+					glTranslatef(0.0, 0.0, 0.01);
 				}
 
 				gluDisk(m_quadricCompanionOrbitPlane,
@@ -352,7 +352,7 @@ void PulsarAnimationWidget::paintGL()
 
 		// pulsar's plane
 		glPushMatrix();
-			glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
+			glRotatef(90.0, 1.0, 0.0, 0.0);
 			gluDisk(m_quadricPulsarOrbitPlane,
 					m_pulsarSemiMajorAxis - sizeOffset,
 					m_pulsarSemiMajorAxis + sizeOffset,
@@ -363,7 +363,7 @@ void PulsarAnimationWidget::paintGL()
 
 void PulsarAnimationWidget::runAnimation()
 {
-	m_frameTimer.start(1000.0f / m_framesPerSecond);
+	m_frameTimer.start(1000.0 / m_framesPerSecond);
 }
 
 void PulsarAnimationWidget::pauseAnimation()
@@ -382,13 +382,13 @@ void PulsarAnimationWidget::stopAnimation()
 void PulsarAnimationWidget::updateFrame()
 {
 	m_pulsarRotationAngle += m_pulsarRotationDelta;
-	if(m_pulsarRotationAngle > 360.0f) {
-		m_pulsarRotationAngle -= 360.0f;
+	if(m_pulsarRotationAngle > 360.0) {
+		m_pulsarRotationAngle -= 360.0;
 		updatePulseProfile();
 	}
 	m_orbitRotationAngle += m_orbitRotationDelta;
-	if(m_orbitRotationAngle > 360.0f) {
-		m_orbitRotationAngle -= 360.0f;
+	if(m_orbitRotationAngle > 360.0) {
+		m_orbitRotationAngle -= 360.0;
 	}
 
 	updateGL();
@@ -423,12 +423,12 @@ void PulsarAnimationWidget::mouseMoveEvent(QMouseEvent *event)
 	Qt::MouseButtons buttons = event->buttons();
 	if((buttons & Qt::LeftButton) == Qt::LeftButton) {
 		if(m_mouseLastX != 0) {
-			m_mouseAngleH -= (m_mouseLastX - event->x()) * 0.5f ;
+			m_mouseAngleH -= (m_mouseLastX - event->x()) * 0.5 ;
 			m_mouseAngleH = m_mouseAngleH < 360 ? m_mouseAngleH : 0;
 
 		}
 		if(m_mouseLastY != 0) {
-			m_mouseAngleV -= (m_mouseLastY - event->y()) * 0.5f;
+			m_mouseAngleV -= (m_mouseLastY - event->y()) * 0.5;
 			m_mouseAngleV = m_mouseAngleV < 90 ? m_mouseAngleV : 90;
 			m_mouseAngleV = m_mouseAngleV > -90 ? m_mouseAngleV : -90;
 		}
@@ -438,7 +438,7 @@ void PulsarAnimationWidget::mouseMoveEvent(QMouseEvent *event)
 	}
 	else if((buttons & Qt::RightButton) == Qt::RightButton) {
 		if(m_mouseLastY != 0) {
-			m_cameraZoom -= (m_mouseLastY - event->y()) * 0.5f;
+			m_cameraZoom -= (m_mouseLastY - event->y()) * 0.5;
 			m_cameraZoom = m_cameraZoom >= m_cameraZoomLBound ? m_cameraZoom : m_cameraZoomLBound;
 			updateCameraPosition(m_mouseAngleH, m_mouseAngleV, m_cameraZoom);
 		}
@@ -459,7 +459,7 @@ void PulsarAnimationWidget::mouseReleaseEvent(QMouseEvent *event)
 	updateGL();
 }
 
-void PulsarAnimationWidget::updateCameraPosition(const int angleH, const int angleV, const float zoom)
+void PulsarAnimationWidget::updateCameraPosition(const int angleH, const int angleV, const double zoom)
 {
 	m_cameraPosX = sin(angleH * deg2rad) * zoom;
 	m_cameraPosY = sin(angleV * deg2rad) * zoom;
@@ -475,7 +475,7 @@ void PulsarAnimationWidget::setFramePerSecond(const unsigned int fps)
 	m_framesPerSecond = fps;
 }
 
-void PulsarAnimationWidget::setPulsarSemiMajorAxis(const float length)
+void PulsarAnimationWidget::setPulsarSemiMajorAxis(const double length)
 {
 	m_pulsarSemiMajorAxis = length;
 	m_companionSemiMajorAxis = (m_pulsarMass/m_companionMass) * m_pulsarSemiMajorAxis;
@@ -485,7 +485,7 @@ void PulsarAnimationWidget::setPulsarSemiMajorAxis(const float length)
 	updateGL();
 }
 
-void PulsarAnimationWidget::setCompanionMass(const float mass)
+void PulsarAnimationWidget::setCompanionMass(const double mass)
 {
 	m_companionMass = mass;
 	updateOrbitRadii();
@@ -494,7 +494,7 @@ void PulsarAnimationWidget::setCompanionMass(const float mass)
 	updateGL();
 }
 
-void PulsarAnimationWidget::setPulsarMass(const float mass)
+void PulsarAnimationWidget::setPulsarMass(const double mass)
 {
 	m_pulsarMass = mass;
 	updateOrbitRadii();
@@ -503,9 +503,9 @@ void PulsarAnimationWidget::setPulsarMass(const float mass)
 	updateGL();
 }
 
-void PulsarAnimationWidget::setPulsarSpinFrequency(const float frequency)
+void PulsarAnimationWidget::setPulsarSpinFrequency(const double frequency)
 {
-	m_pulsarRotationDelta = (360.0f * frequency) / m_framesPerSecond;
+	m_pulsarRotationDelta = (360.0 * frequency) / m_framesPerSecond;
 	updatePulseProfile();
 }
 
@@ -528,8 +528,8 @@ void PulsarAnimationWidget::setPulsarMagneticAxisInclination(const int degrees)
 void PulsarAnimationWidget::updateOrbitPeriod()
 {
 	m_orbitalPeriod = 3.1553e7 * sqrt(
-						(pow(m_pulsarSemiMajorAxis, 3.0f) * pow(m_pulsarMass+m_companionMass, 2.0f)) /
-						 pow(m_companionMass, 3.0f)
+						(pow(m_pulsarSemiMajorAxis, 3.0) * pow(m_pulsarMass+m_companionMass, 2.0)) /
+						 pow(m_companionMass, 3.0)
 					  );
 
 	// visual correction factor (increase orbital momentum)
@@ -541,9 +541,9 @@ void PulsarAnimationWidget::updateOrbitPeriod()
 void PulsarAnimationWidget::updateOrbitRadii()
 {
 	m_pulsarSemiMajorAxis = 1.0015e-5 * pow(
-								(pow(m_orbitalPeriod, 2.0f) * pow(m_companionMass, 3.0f)) /
-								 pow(m_pulsarMass+m_companionMass, 2.0f),
-								 1.0f/3.0f
+								(pow(m_orbitalPeriod, 2.0) * pow(m_companionMass, 3.0)) /
+								 pow(m_pulsarMass+m_companionMass, 2.0),
+								 1.0/3.0
 							);
 
 	m_companionSemiMajorAxis = (m_pulsarMass/m_companionMass) * m_pulsarSemiMajorAxis;
@@ -553,8 +553,8 @@ void PulsarAnimationWidget::updateOrbitRadii()
 
 void PulsarAnimationWidget::resetParameters()
 {
-	m_pulsarRotationAngle = 0.0f;
-	m_orbitRotationAngle = 0.0f;
+	m_pulsarRotationAngle = 0.0;
+	m_orbitRotationAngle = 0.0;
 
 	emit pulsarAnimationReset();
 }
@@ -571,8 +571,8 @@ void PulsarAnimationWidget::updatePulseProfile()
 	const double	xk				= -m_cameraPosZ;
 	const double	yk				= -m_cameraPosX;
 	const double	zk				= m_cameraPosY;
-	const double	cam				= pow(xk, 2.0f) + pow(yk, 2.0f) + pow(zk, 2.0f);
-	const double	alpha			= deg2rad * (90.0f - m_mouseAngleH);
+	const double	cam				= pow(xk, 2.0) + pow(yk, 2.0) + pow(zk, 2.0);
+	const double	alpha			= deg2rad * (90.0 - m_mouseAngleH);
 	const double	delta			= deg2rad * m_mouseAngleV;
 	const double	gaussProfile	= 0.012337;
 
@@ -587,11 +587,8 @@ void PulsarAnimationWidget::updatePulseProfile()
 
 		double b = sqrt(pow(rp,2.0) + cam - (2.0 * sqrt(cam) * rp * cos(delta) * sin(alpha + phiOrb)));
 
-		// determine pulse amplitude
-		double amp = exp(-2.0 * (1.0 - fabs(a/b)) / gaussProfile);
-
-		// store amplitude
-		m_pulseProfile[x] = (float) amp;
+		// determine and store pulse amplitude
+		m_pulseProfile[x] = exp(-2.0 * (1.0 - fabs(a/b)) / gaussProfile);
 	}
 
 	// propagate new profile
diff --git a/src/pulsaranimationwidget.h b/src/pulsaranimationwidget.h
index dd51e2e..b4ac3e1 100644
--- a/src/pulsaranimationwidget.h
+++ b/src/pulsaranimationwidget.h
@@ -39,12 +39,12 @@ public:
 	virtual ~PulsarAnimationWidget();
 
 	void setFramePerSecond(const unsigned int fps);
-	void setCompanionMass(const float mass);
-	void setPulsarMass(const float mass);
-	void setPulsarSpinFrequency(const float frequency);
+	void setCompanionMass(const double mass);
+	void setPulsarMass(const double mass);
+	void setPulsarSpinFrequency(const double frequency);
 	void setPulsarSpinAxisInclination(const int degrees);
 	void setPulsarMagneticAxisInclination(const int degrees);
-	void setPulsarSemiMajorAxis(const float length);
+	void setPulsarSemiMajorAxis(const double length);
 
 public slots:
 	void runAnimation();
@@ -58,8 +58,8 @@ public slots:
 
 signals:
 	void pulsarSemiMajorAxisUpdated(double value);
-	void pulseProfileUpdated(const QVector<float>& data);
-	void pulsarAnimationStep(float stepSize);
+	void pulseProfileUpdated(const QVector<double>& data);
+	void pulsarAnimationStep(double stepSize);
 	void pulsarAnimationReset();
 
 private:
@@ -73,7 +73,7 @@ private:
 
 	void updateOrbitPeriod();
     void updateOrbitRadii();
-    void updateCameraPosition(const int angleH, const int angleV, const float zoom);
+    void updateCameraPosition(const int angleH, const int angleV, const double zoom);
     void resetParameters();
     void updatePulseProfile();
 
@@ -93,16 +93,16 @@ private:
 
 	int m_framesPerSecond;
 
-	float m_pulsarRotationAngle;
-	float m_pulsarRotationDelta;
+	double m_pulsarRotationAngle;
+	double m_pulsarRotationDelta;
 
 	double m_orbitalPeriod;
-	float m_orbitRotationAngle;
-	float m_orbitRotationDelta;
+	double m_orbitRotationAngle;
+	double m_orbitRotationDelta;
 
-	float m_pulsarMass;
+	double m_pulsarMass;
 	double m_pulsarSemiMajorAxis;
-	float m_companionMass;
+	double m_companionMass;
 	double m_companionSemiMajorAxis;
 
 	int m_pulsarSpinAxisInclination;
@@ -116,15 +116,15 @@ private:
 	int m_mouseLastY;
 	int m_mouseAngleH;
 	int m_mouseAngleV;
-	float m_cameraZoom;
-	float m_cameraZoomLBound;
-	float m_cameraPosX;
-	float m_cameraPosY;
-	float m_cameraPosZ;
+	double m_cameraZoom;
+	double m_cameraZoomLBound;
+	double m_cameraPosX;
+	double m_cameraPosY;
+	double m_cameraPosZ;
 
-	QVector<float> m_pulseProfile;
+	QVector<double> m_pulseProfile;
 
-	static const float deg2rad;
+	static const double deg2rad;
 };
 
 #endif /* PULSARANIMATIONWIDGET_H_ */
diff --git a/src/pulsatingscience.cpp b/src/pulsatingscience.cpp
index ae4de73..f0c4019 100644
--- a/src/pulsatingscience.cpp
+++ b/src/pulsatingscience.cpp
@@ -72,14 +72,14 @@ PulsatingScience::PulsatingScience(QWidget *parent) : QMainWindow(parent)
 	connect(ui.pulsarGlWidget, SIGNAL(pulsarSemiMajorAxisUpdated(double)),
 				this, SLOT(updatePulsarSemiMajorAxisValue(double)));
 
-	connect(ui.pulsarGlWidget, SIGNAL(pulsarAnimationStep(float)),
-				ui.pulseScopeWidget, SLOT(markerStep(float)), Qt::DirectConnection);
+	connect(ui.pulsarGlWidget, SIGNAL(pulsarAnimationStep(double)),
+				ui.pulseScopeWidget, SLOT(markerStep(double)), Qt::DirectConnection);
 
 	connect(ui.pulsarGlWidget, SIGNAL(pulsarAnimationReset()),
 				ui.pulseScopeWidget, SLOT(markerReset()));
 
-	connect(ui.pulsarGlWidget, SIGNAL(pulseProfileUpdated(const QVector<float>&)),
-				ui.pulseScopeWidget, SLOT(drawCurve(const QVector<float>&)), Qt::DirectConnection);
+	connect(ui.pulsarGlWidget, SIGNAL(pulseProfileUpdated(const QVector<double>&)),
+				ui.pulseScopeWidget, SLOT(drawCurve(const QVector<double>&)), Qt::DirectConnection);
 }
 
 PulsatingScience::~PulsatingScience()
@@ -151,37 +151,37 @@ void PulsatingScience::on_pushStop_clicked()
 void PulsatingScience::on_radioCompanionWD_toggled(bool checked)
 {
 	if(checked) {
-		ui.pulsarGlWidget->setCompanionMass(0.6f);
-		ui.lcdCompanionMass->display(QString::number(0.6f, 'f', 1));
+		ui.pulsarGlWidget->setCompanionMass(0.6);
+		ui.lcdCompanionMass->display(QString::number(0.6, 'f', 1));
 	}
 }
 
 void PulsatingScience::on_radioCompanionSun_toggled(bool checked)
 {
 	if(checked) {
-		ui.pulsarGlWidget->setCompanionMass(1.0f);
-		ui.lcdCompanionMass->display(QString::number(1.0f, 'f', 1));
+		ui.pulsarGlWidget->setCompanionMass(1.0);
+		ui.lcdCompanionMass->display(QString::number(1.0, 'f', 1));
 	}
 }
 
 void PulsatingScience::on_radioCompanionNS_toggled(bool checked)
 {
 	if(checked) {
-		ui.pulsarGlWidget->setCompanionMass(1.4f);
-		ui.lcdCompanionMass->display(QString::number(1.4f, 'f', 1));
+		ui.pulsarGlWidget->setCompanionMass(1.4);
+		ui.lcdCompanionMass->display(QString::number(1.4, 'f', 1));
 	}
 }
 
 void PulsatingScience::on_sliderPulsarMass_valueChanged(int value)
 {
-	ui.pulsarGlWidget->setPulsarMass(value * 0.1f);
-	ui.lcdPulsarMass->display(QString::number(value * 0.1f, 'f', 1));
+	ui.pulsarGlWidget->setPulsarMass(value * 0.1);
+	ui.lcdPulsarMass->display(QString::number(value * 0.1, 'f', 1));
 }
 
 void PulsatingScience::on_sliderPulsarSpinFrequency_valueChanged(int value)
 {
-	ui.pulsarGlWidget->setPulsarSpinFrequency(value * 0.1f);
-	ui.lcdPulsarSpinFrequency->display(QString::number(value * 0.1f, 'f', 1));
+	ui.pulsarGlWidget->setPulsarSpinFrequency(value * 0.1);
+	ui.lcdPulsarSpinFrequency->display(QString::number(value * 0.1, 'f', 1));
 }
 
 void PulsatingScience::on_sliderPulsarSpinAxisInclination_valueChanged(int value)
@@ -198,8 +198,8 @@ void PulsatingScience::on_sliderPulsarMagneticAxisInclination_valueChanged(int v
 
 void PulsatingScience::on_sliderPulsarSemiMajorAxis_valueChanged(int value)
 {
-	ui.pulsarGlWidget->setPulsarSemiMajorAxis(value * 0.001f);
-	ui.lcdPulsarSemiMajorAxis->display(QString::number(value * 0.001f, 'f', 1));
+	ui.pulsarGlWidget->setPulsarSemiMajorAxis(value * 0.001);
+	ui.lcdPulsarSemiMajorAxis->display(QString::number(value * 0.001, 'f', 1));
 	ui.lcdPulsarSemiMajorAxis->setStyleSheet("color: black");
 }
 
diff --git a/src/pulsescopewidget.cpp b/src/pulsescopewidget.cpp
index 8f2f1c2..0b83e8d 100644
--- a/src/pulsescopewidget.cpp
+++ b/src/pulsescopewidget.cpp
@@ -42,16 +42,16 @@ PulseScopeWidget::PulseScopeWidget(QWidget *parent) : QGraphicsView(parent),
 		qWarning("Sorry, no multisampling support for pulse scope...");
 	}
 
-	m_scopeSizeH = 360.0f;
-	m_scopeSizeV = 1.0f;
+	m_scopeSizeH = 360.0;
+	m_scopeSizeV = 1.0;
 
 	m_path = NULL;
-	m_marker = m_scene.addLine(0.0f, 0.0f, 0.0f, m_scopeSizeV, QPen(Qt::red));
+	m_marker = m_scene.addLine(0.0, 0.0, 0.0, m_scopeSizeV, QPen(Qt::red));
 	m_marker->setZValue(1);
 
 	setScene(&m_scene);
 
-	m_data.fill(0.0f, m_scopeSizeH);
+	m_data.fill(0.0, m_scopeSizeH);
 	drawCurve(m_data);
 }
 
@@ -67,11 +67,11 @@ void PulseScopeWidget::resizeEvent(QResizeEvent *event)
 	fitInView(m_scene.itemsBoundingRect(), Qt::IgnoreAspectRatio);
 }
 
-void PulseScopeWidget::drawCurve(const QVector<float>& vector)
+void PulseScopeWidget::drawCurve(const QVector<double>& vector)
 {
 	m_data = vector;
 
-	QPainterPath pulsePath(QPoint(0.0f, m_scopeSizeV));
+	QPainterPath pulsePath(QPoint(0.0, m_scopeSizeV));
 	for(int i = 0; i < m_scopeSizeH; ++i) {
 		pulsePath.lineTo(i, m_scopeSizeV - m_data.at(i));
 	}
@@ -83,12 +83,12 @@ void PulseScopeWidget::drawCurve(const QVector<float>& vector)
 	}
 }
 
-void PulseScopeWidget::markerStep(float stepSize) {
-	static float x = 0.0f;
+void PulseScopeWidget::markerStep(double stepSize) {
+	static double x = 0.0;
 
 	if(x < m_scopeSizeH) {
 		x += stepSize;
-		m_marker->setLine(x, 0.0f, x, m_scopeSizeV);
+		m_marker->setLine(x, 0.0, x, m_scopeSizeV);
 	}
 	else {
 		x -= m_scopeSizeH;
@@ -96,5 +96,5 @@ void PulseScopeWidget::markerStep(float stepSize) {
 }
 
 void PulseScopeWidget::markerReset() {
-	m_marker->setLine(0.0f, 0.0f, 0.0f, m_scopeSizeV);
+	m_marker->setLine(0.0, 0.0, 0.0, m_scopeSizeV);
 }
diff --git a/src/pulsescopewidget.h b/src/pulsescopewidget.h
index 27537c7..96192a3 100644
--- a/src/pulsescopewidget.h
+++ b/src/pulsescopewidget.h
@@ -41,18 +41,18 @@ public:
 	void resizeEvent(QResizeEvent *event);
 
 public slots:
-	void drawCurve(const QVector<float>& vector);
-	void markerStep(float stepSize);
+	void drawCurve(const QVector<double>& vector);
+	void markerStep(double stepSize);
 	void markerReset();
 
 private:
 	QGraphicsScene m_scene;
-	QVector<float> m_data;
+	QVector<double> m_data;
 	QGraphicsPathItem *m_path;
 	QGraphicsLineItem *m_marker;
 
-	float m_scopeSizeH;
-	float m_scopeSizeV;
+	double m_scopeSizeH;
+	double m_scopeSizeV;
 };
 
 #endif /* PULSESCOPEWIDGET_H_ */
-- 
GitLab