.class public Lcom/example/linechartlibrary/FloatUtils; .super Ljava/lang/Object; .source "FloatUtils.java" # static fields .field public static final POW10:[I # direct methods .method static constructor ()V .registers 1 const/4 v0, 0x7 .line 5 new-array v0, v0, [I fill-array-data v0, :array_a sput-object v0, Lcom/example/linechartlibrary/FloatUtils;->POW10:[I return-void nop :array_a .array-data 4 0x1 0xa 0x64 0x3e8 0x2710 0x186a0 0xf4240 .end array-data .end method .method public constructor ()V .registers 1 .line 4 invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method .method public static almostEqual(FFFF)Z .registers 6 sub-float v0, p0, p1 .line 65 invoke-static {v0}, Ljava/lang/Math;->abs(F)F move-result v0 cmpg-float p2, v0, p2 const/4 v1, 0x1 if-gtz p2, :cond_c return v1 .line 70 :cond_c invoke-static {p0}, Ljava/lang/Math;->abs(F)F move-result p0 .line 71 invoke-static {p1}, Ljava/lang/Math;->abs(F)F move-result p1 cmpl-float p2, p0, p1 if-lez p2, :cond_19 goto :goto_1a :cond_19 move p0, p1 :goto_1a mul-float/2addr p0, p3 cmpg-float p0, v0, p0 if-gtz p0, :cond_20 return v1 :cond_20 const/4 p0, 0x0 return p0 .end method .method public static computeAutoGeneratedAxisValues(FFILcom/example/linechartlibrary/AxisAutoValues;)V .registers 13 sub-float v0, p1, p0 float-to-double v0, v0 const/4 v2, 0x0 if-eqz p2, :cond_74 const-wide/16 v3, 0x0 cmpg-double v3, v0, v3 if-gtz v3, :cond_d goto :goto_74 :cond_d int-to-double v3, p2 div-double/2addr v0, v3 .line 162 invoke-static {v0, v1}, Lcom/example/linechartlibrary/FloatUtils;->roundToOneSignificantFigure(D)F move-result p2 float-to-double v0, p2 .line 163 invoke-static {v0, v1}, Ljava/lang/Math;->log10(D)D move-result-wide v3 double-to-int p2, v3 int-to-double v3, p2 const-wide/high16 v5, 0x4024000000000000L # 10.0 invoke-static {v5, v6, v3, v4}, Ljava/lang/Math;->pow(DD)D move-result-wide v3 div-double v7, v0, v3 double-to-int p2, v7 const/4 v7, 0x5 if-le p2, v7, :cond_2b mul-double/2addr v3, v5 .line 167 invoke-static {v3, v4}, Ljava/lang/Math;->floor(D)D move-result-wide v0 :cond_2b float-to-double v3, p0 div-double/2addr v3, v0 .line 170 invoke-static {v3, v4}, Ljava/lang/Math;->ceil(D)D move-result-wide v3 mul-double/2addr v3, v0 float-to-double p0, p1 div-double/2addr p0, v0 .line 171 invoke-static {p0, p1}, Ljava/lang/Math;->floor(D)D move-result-wide p0 mul-double/2addr p0, v0 invoke-static {p0, p1}, Lcom/example/linechartlibrary/FloatUtils;->nextUp(D)D move-result-wide p0 move p2, v2 move-wide v5, v3 :goto_3f cmpg-double v7, v5, p0 if-gtz v7, :cond_47 add-int/lit8 p2, p2, 0x1 add-double/2addr v5, v0 goto :goto_3f .line 180 :cond_47 iput p2, p3, Lcom/example/linechartlibrary/AxisAutoValues;->valuesNumber:I .line 182 iget-object p0, p3, Lcom/example/linechartlibrary/AxisAutoValues;->values:[F array-length p0, p0 if-ge p0, p2, :cond_52 .line 184 new-array p0, p2, [F iput-object p0, p3, Lcom/example/linechartlibrary/AxisAutoValues;->values:[F :cond_52 move p0, v2 :goto_53 if-ge p0, p2, :cond_5e .line 188 iget-object p1, p3, Lcom/example/linechartlibrary/AxisAutoValues;->values:[F double-to-float v5, v3 aput v5, p1, p0 add-double/2addr v3, v0 add-int/lit8 p0, p0, 0x1 goto :goto_53 :cond_5e const-wide/high16 p0, 0x3ff0000000000000L # 1.0 cmpg-double p0, v0, p0 if-gez p0, :cond_71 .line 192 invoke-static {v0, v1}, Ljava/lang/Math;->log10(D)D move-result-wide p0 neg-double p0, p0 invoke-static {p0, p1}, Ljava/lang/Math;->ceil(D)D move-result-wide p0 double-to-int p0, p0 iput p0, p3, Lcom/example/linechartlibrary/AxisAutoValues;->decimals:I goto :goto_73 .line 194 :cond_71 iput v2, p3, Lcom/example/linechartlibrary/AxisAutoValues;->decimals:I :goto_73 return-void .line 156 :cond_74 :goto_74 new-array p0, v2, [F iput-object p0, p3, Lcom/example/linechartlibrary/AxisAutoValues;->values:[F .line 157 iput v2, p3, Lcom/example/linechartlibrary/AxisAutoValues;->valuesNumber:I return-void .end method .method public static formatFloat([CFIIC)I .registers 16 .line 101 sget-object v0, Lcom/example/linechartlibrary/FloatUtils;->POW10:[I array-length v1, v0 const/4 v2, 0x1 if-lt p3, v1, :cond_c sub-int/2addr p2, v2 const/16 p1, 0x2e .line 102 aput-char p1, p0, p2 return v2 :cond_c const/4 v1, 0x0 cmpl-float v3, p1, v1 const/16 v4, 0x30 if-nez v3, :cond_17 sub-int/2addr p2, v2 .line 107 aput-char v4, p0, p2 return v2 :cond_17 cmpg-float v1, p1, v1 const/4 v3, 0x0 if-gez v1, :cond_1f neg-float p1, p1 move v1, v2 goto :goto_20 :cond_1f move v1, v3 .line 114 :goto_20 array-length v5, v0 if-le p3, v5, :cond_25 .line 115 array-length p3, v0 sub-int/2addr p3, v2 .line 117 :cond_25 aget v0, v0, p3 int-to-float v0, v0 mul-float/2addr p1, v0 .line 118 invoke-static {p1}, Ljava/lang/Math;->round(F)I move-result p1 int-to-long v5, p1 sub-int/2addr p2, v2 :goto_2f const-wide/16 v7, 0x0 cmp-long p1, v5, v7 if-nez p1, :cond_50 add-int/lit8 p1, p3, 0x1 if-ge v3, p1, :cond_3a goto :goto_50 :cond_3a add-int/lit8 p1, p2, 0x1 .line 131 aget-char p1, p0, p1 if-ne p1, p4, :cond_47 add-int/lit8 p1, p2, -0x1 .line 132 aput-char v4, p0, p2 add-int/lit8 v3, v3, 0x1 move p2, p1 :cond_47 if-eqz v1, :cond_4f const/16 p1, 0x2d .line 136 aput-char p1, p0, p2 add-int/lit8 v3, v3, 0x1 :cond_4f return v3 :cond_50 :goto_50 const-wide/16 v7, 0xa .line 122 rem-long v9, v5, v7 long-to-int p1, v9 .line 123 div-long/2addr v5, v7 add-int/lit8 v0, p2, -0x1 add-int/2addr p1, v4 int-to-char p1, p1 .line 124 aput-char p1, p0, p2 add-int/lit8 p1, v3, 0x1 if-ne p1, p3, :cond_67 add-int/lit8 p2, p2, -0x2 .line 127 aput-char p4, p0, v0 add-int/lit8 v3, v3, 0x2 goto :goto_2f :cond_67 move v3, p1 move p2, v0 goto :goto_2f .end method .method public static nextDown(D)D .registers 4 .line 50 invoke-static {p0, p1}, Ljava/lang/Double;->isNaN(D)Z move-result v0 if-nez v0, :cond_25 const-wide/high16 v0, -0x10000000000000L # Double.NEGATIVE_INFINITY cmpl-double v0, p0, v0 if-nez v0, :cond_d goto :goto_25 :cond_d const-wide/16 v0, 0x0 cmpl-double v0, p0, v0 if-nez v0, :cond_16 const-wide/high16 p0, -0x4960000000000000L # -1.401298464324817E-45 return-wide p0 .line 56 :cond_16 invoke-static {p0, p1}, Ljava/lang/Double;->doubleToRawLongBits(D)J move-result-wide p0 if-lez v0, :cond_1e const/4 v0, -0x1 goto :goto_1f :cond_1e const/4 v0, 0x1 :goto_1f int-to-long v0, v0 add-long/2addr p0, v0 invoke-static {p0, p1}, Ljava/lang/Double;->longBitsToDouble(J)D move-result-wide p0 :cond_25 :goto_25 return-wide p0 .end method .method public static nextDownF(F)F .registers 2 .line 23 invoke-static {p0}, Ljava/lang/Float;->isNaN(F)Z move-result v0 if-nez v0, :cond_24 const/high16 v0, -0x800000 # Float.NEGATIVE_INFINITY cmpl-float v0, p0, v0 if-nez v0, :cond_d goto :goto_24 :cond_d const/4 v0, 0x0 cmpl-float v0, p0, v0 if-nez v0, :cond_16 const p0, -0x7fffffff return p0 .line 29 :cond_16 invoke-static {p0}, Ljava/lang/Float;->floatToRawIntBits(F)I move-result p0 if-lez v0, :cond_1e const/4 v0, -0x1 goto :goto_1f :cond_1e const/4 v0, 0x1 :goto_1f add-int/2addr p0, v0 invoke-static {p0}, Ljava/lang/Float;->intBitsToFloat(I)F move-result p0 :cond_24 :goto_24 return p0 .end method .method public static nextUp(D)D .registers 6 .line 38 invoke-static {p0, p1}, Ljava/lang/Double;->isNaN(D)Z move-result v0 if-nez v0, :cond_21 const-wide/high16 v0, 0x7ff0000000000000L # Double.POSITIVE_INFINITY cmpl-double v0, p0, v0 if-nez v0, :cond_d goto :goto_21 :cond_d const-wide/16 v0, 0x0 add-double/2addr p0, v0 .line 42 invoke-static {p0, p1}, Ljava/lang/Double;->doubleToRawLongBits(D)J move-result-wide v2 cmpl-double p0, p0, v0 if-ltz p0, :cond_1a const/4 p0, 0x1 goto :goto_1b :cond_1a const/4 p0, -0x1 :goto_1b int-to-long p0, p0 add-long/2addr v2, p0 invoke-static {v2, v3}, Ljava/lang/Double;->longBitsToDouble(J)D move-result-wide p0 :cond_21 :goto_21 return-wide p0 .end method .method public static nextUpF(F)F .registers 3 .line 11 invoke-static {p0}, Ljava/lang/Float;->isNaN(F)Z move-result v0 if-nez v0, :cond_1f const/high16 v0, 0x7f800000 # Float.POSITIVE_INFINITY cmpl-float v0, p0, v0 if-nez v0, :cond_d goto :goto_1f :cond_d const/4 v0, 0x0 add-float/2addr p0, v0 .line 15 invoke-static {p0}, Ljava/lang/Float;->floatToRawIntBits(F)I move-result v1 cmpl-float p0, p0, v0 if-ltz p0, :cond_19 const/4 p0, 0x1 goto :goto_1a :cond_19 const/4 p0, -0x1 :goto_1a add-int/2addr v1, p0 invoke-static {v1}, Ljava/lang/Float;->intBitsToFloat(I)F move-result p0 :cond_1f :goto_1f return p0 .end method .method public static roundToOneSignificantFigure(D)F .registers 7 const-wide/16 v0, 0x0 cmpg-double v0, p0, v0 if-gez v0, :cond_8 neg-double v0, p0 goto :goto_9 :cond_8 move-wide v0, p0 .line 86 :goto_9 invoke-static {v0, v1}, Ljava/lang/Math;->log10(D)D move-result-wide v0 double-to-float v0, v0 float-to-double v0, v0 invoke-static {v0, v1}, Ljava/lang/Math;->ceil(D)D move-result-wide v0 double-to-float v0, v0 float-to-int v0, v0 rsub-int/lit8 v0, v0, 0x1 const-wide/high16 v1, 0x4024000000000000L # 10.0 int-to-double v3, v0 .line 88 invoke-static {v1, v2, v3, v4}, Ljava/lang/Math;->pow(DD)D move-result-wide v0 double-to-float v0, v0 float-to-double v1, v0 mul-double/2addr p0, v1 .line 89 invoke-static {p0, p1}, Ljava/lang/Math;->round(D)J move-result-wide p0 long-to-float p0, p0 div-float/2addr p0, v0 return p0 .end method