Fix floating point conversions to match Kotlin/JVM
(cherry picked from commit de078d6)
This commit is contained in:
committed by
Pavel Punegov
parent
df41389ef7
commit
cc89dc2754
@@ -370,12 +370,22 @@ KFloat Kotlin_Float_dec (KFloat a ) { return --a; }
|
||||
KFloat Kotlin_Float_unaryPlus (KFloat a ) { return +a; }
|
||||
KFloat Kotlin_Float_unaryMinus (KFloat a ) { return -a; }
|
||||
|
||||
KByte Kotlin_Float_toByte (KFloat a ) { return a; }
|
||||
KShort Kotlin_Float_toShort (KFloat a ) { return a; }
|
||||
KInt Kotlin_Float_toInt (KFloat a ) { return a; }
|
||||
KLong Kotlin_Float_toLong (KFloat a ) { return a; }
|
||||
KInt Kotlin_Float_toInt (KFloat a ) {
|
||||
if (isnan(a)) return 0;
|
||||
if (a >= (KFloat) INT_MAX) return INT_MAX;
|
||||
if (a <= (KFloat) INT_MIN) return INT_MIN;
|
||||
return a;
|
||||
}
|
||||
KLong Kotlin_Float_toLong (KFloat a ) {
|
||||
if (isnan(a)) return 0;
|
||||
if (a >= (KFloat) LONG_MAX) return LONG_MAX;
|
||||
if (a <= (KFloat) LONG_MIN) return LONG_MIN;
|
||||
return a;
|
||||
}
|
||||
KFloat Kotlin_Float_toFloat (KFloat a ) { return a; }
|
||||
KDouble Kotlin_Float_toDouble (KFloat a ) { return a; }
|
||||
KByte Kotlin_Float_toByte (KFloat a ) { return (KByte) Kotlin_Float_toInt(a); }
|
||||
KShort Kotlin_Float_toShort (KFloat a ) { return (KShort) Kotlin_Float_toInt(a); }
|
||||
|
||||
KInt Kotlin_Float_bits (KFloat a) {
|
||||
union {
|
||||
@@ -448,10 +458,20 @@ KDouble Kotlin_Double_dec (KDouble a ) { return --a; }
|
||||
KDouble Kotlin_Double_unaryPlus (KDouble a ) { return +a; }
|
||||
KDouble Kotlin_Double_unaryMinus (KDouble a ) { return -a; }
|
||||
|
||||
KByte Kotlin_Double_toByte (KDouble a ) { return a; }
|
||||
KShort Kotlin_Double_toShort (KDouble a ) { return a; }
|
||||
KInt Kotlin_Double_toInt (KDouble a ) { return a; }
|
||||
KLong Kotlin_Double_toLong (KDouble a ) { return a; }
|
||||
KInt Kotlin_Double_toInt (KDouble a ) {
|
||||
if (isnan(a)) return 0;
|
||||
if (a >= (KDouble) INT_MAX) return INT_MAX;
|
||||
if (a <= (KDouble) INT_MIN) return INT_MIN;
|
||||
return a;
|
||||
}
|
||||
KLong Kotlin_Double_toLong (KDouble a ) {
|
||||
if (isnan(a)) return 0;
|
||||
if (a >= (KDouble) LONG_MAX) return LONG_MAX;
|
||||
if (a <= (KDouble) LONG_MIN) return LONG_MIN;
|
||||
return a;
|
||||
}
|
||||
KByte Kotlin_Double_toByte (KDouble a ) { return (KByte) Kotlin_Double_toInt(a); }
|
||||
KShort Kotlin_Double_toShort (KDouble a ) { return (KShort) Kotlin_Double_toInt(a); }
|
||||
KFloat Kotlin_Double_toFloat (KDouble a ) { return a; }
|
||||
KDouble Kotlin_Double_toDouble (KDouble a ) { return a; }
|
||||
|
||||
|
||||
@@ -975,8 +975,7 @@ public final class Float : Number(), Comparable<Float> {
|
||||
/**
|
||||
* A constant holding the "not a number" value of Float.
|
||||
*/
|
||||
@Suppress("DIVISION_BY_ZERO")
|
||||
public val NaN: Float = 0.0f / 0.0f
|
||||
public val NaN: Float = kotlinx.cinterop.bitsToFloat(0x7fc00000)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1194,8 +1193,7 @@ public final class Double : Number(), Comparable<Double> {
|
||||
/**
|
||||
* A constant holding the "not a number" value of Double.
|
||||
*/
|
||||
@Suppress("DIVISION_BY_ZERO")
|
||||
public val NaN: Double = 0.0 / 0.0
|
||||
public val NaN: Double = kotlinx.cinterop.bitsToDouble(0x7ff8000000000000L)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user