From bfd7cf82b0fecb5af303b2800b565f57a0b502b7 Mon Sep 17 00:00:00 2001 From: marcoonthegit Date: Mon, 6 Jun 2022 17:20:51 +0200 Subject: [PATCH] * commit weird temperature scale conversion bug #39763 (cherry picked from commit 3c4f1c454f7fa720e14dd7e9fe2a5d9c53b79a01) --- packages/rtl-objpas/src/inc/stdconvs.pp | 61 ++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/packages/rtl-objpas/src/inc/stdconvs.pp b/packages/rtl-objpas/src/inc/stdconvs.pp index 21b4ec094a..1885ee36f5 100644 --- a/packages/rtl-objpas/src/inc/stdconvs.pp +++ b/packages/rtl-objpas/src/inc/stdconvs.pp @@ -140,6 +140,10 @@ var tuFahrenheit, tuRankine, tuReamur, + tuDelisle, + tuNewton, + tuRomer, + tuReguloGasMark, { cbTime family @@ -229,7 +233,14 @@ function CelsiusToKelvin (const AValue: Double): Double; function KelvinToCelsius (const AValue: Double): Double; function RankineToCelsius (const AValue: Double): Double; function CelsiusToRankine (const AValue: Double): Double; - +function DelisleToCelsius (const AValue: Double): Double; +function CelsiusToDelisle (const AValue: Double): Double; +function NewtonToCelsius (const AValue: Double): Double; +function CelsiusToNewton (const AValue: Double): Double; +function RomerToCelsius (const AValue: Double): Double; +function CelsiusToRomer (const AValue: Double): Double; +function ReguloGasMarkToCelsius(const AValue: Double): Double; +function CelsiusToReguloGasMark(const AValue: Double): Double; implementation @@ -263,6 +274,46 @@ begin result:=(AValue+273.15)*1.8; end; +function DelisleToCelsius(const AValue: Double): Double; +begin + result:=100-(Double(2/3)*AValue); +end; + +function CelsiusToDelisle(const AValue: Double): Double; +begin + result:=1.5*(100-AValue); +end; + +function NewtonToCelsius(const AValue: Double): Double; +begin + result:=Double(100/33)*AValue; +end; + +function CelsiusToNewton(const AValue: Double): Double; +begin + result:=0.33*AValue; +end; + +function RomerToCelsius(const AValue: Double): Double; +begin + result:=(AValue-7.5)*Double(40/21); +end; + +function CelsiusToRomer(const AValue: Double): Double; +begin + result:=AValue*Double(21/40) + 7.5; +end; + +function ReguloGasMarkToCelsius(const AValue: Double): Double; +begin + result:=AVAlue*Double(125/9) + 121.11; +end; + +function CelsiusToReguloGasMark(const AValue: Double): Double; +begin + result:=Double(9/125)*(AValue-121.11); +end; + ResourceString // Note, designations for FFU's are guesses. @@ -335,6 +386,10 @@ ResourceString // Note, designations for FFU's are guesses. txttuFahrenheit = 'degrees Fahrenheit (degF)'; txttuRankine = 'degrees Rankine (degR)'; txttuReamur = 'degrees Reamur (degReam)'; + txttuDelisle = 'degrees Delisle(degDe)'; + txttuNewton = 'degrees Newton (degN)'; + txttuRomer = 'degrees Romer (degRo)'; + txttuReguloGasMark = 'degrees ReguloGasMark (degRM)'; txttuMilliSeconds = 'milli seconds (ms)'; txttuSeconds = 'seconds (s)'; txttuMinutes = 'minutes (min)'; @@ -492,6 +547,10 @@ begin tuFahrenheit := RegisterConversionType(cbTemperature,txttuFahrenheit,@FahrenheitToCelsius,@CelsiusToFahrenheit); tuRankine := RegisterConversionType(cbTemperature,txttuRankine,@RankineToCelsius,@CelsiusToRankine); tuReamur := RegisterConversionType(cbTemperature,txttuReamur,10/8); // Reaumur? + tuDelisle := RegisterConversionType(cbTemperature,txttuDelisle,@DelisleToCelsius,@CelsiusToDelisle); + tuNewton := RegisterConversionType(cbTemperature,txttuNewton,100/33); + tuRomer := RegisterConversionType(cbTemperature,txttuRomer,@RomerToCelsius,@CelsiusToRomer); + tuReguloGasMark := RegisterConversionType(cbTemperature,txttuReguloGasMark,@ReguloGasMarkToCelsius,@CelsiusToReguloGasMark); end; Const Yearsec=365.24219879*24*3600.0; // year in seconds;