0x8000-0000 added inline comments.

================
Comment at: clang-tidy/readability/MagicNumbersCheck.cpp:57
+const char DefaultIgnoredIntegerValues[] = "0;1;";
+const char DefaultIgnoredFloatingPointValues[] = "0.0;";
+
----------------
aaron.ballman wrote:
> 0x8000-0000 wrote:
> > aaron.ballman wrote:
> > > 0x8000-0000 wrote:
> > > > aaron.ballman wrote:
> > > > > I would still like to see some data on common floating-point literal 
> > > > > values used in large open source project so that we can see what 
> > > > > sensible values should be in this list.
> > > > What value would that bring? The ideal target is that there are no 
> > > > magic values - no guideline that I have seen makes exception for 3.141 
> > > > or 9.81. Each project is special based on how they evolved, and they 
> > > > need to decide for themselves what is worth cleaning vs what can be 
> > > > swept under the rug for now. Why would we lend authority to any 
> > > > particular floating point value?
> > > Because that's too high of a high false positive rate for an acceptable 
> > > clang-tidy check. As mentioned before, there are literally hundreds of 
> > > unnameable floating-point literals in LLVM alone where the value is 1.0 
> > > or 2.0. Having statistical data to pick sensible defaults for this list 
> > > is valuable in that it lowers the false positive rate. If the user 
> > > dislikes the default list for some reason (because for their project, 
> > > maybe 2.0 is a supremely nameable literal value), they can pick a 
> > > different set of defaults.
> > > 
> > > Right now, I'm operating off an assumption that most floating-point 
> > > literals that should not be named are going to be whole numbers that are 
> > > precisely represented in all floating-point semantic models. This data 
> > > will tell us if that assumption is wrong, and if the assumption is wrong, 
> > > we might want to go with separate lists like you've done.
> > Here are the results with the check as-is, run on the llvm code base as of 
> > last night:
> > 
> > top-40
> > ```
> >   10435 2
> >    5543 4
> >    4629 8
> >    3271 3
> >    2702 16
> >    1876 32
> >    1324 64
> >    1309 10
> >    1207 5
> >    1116 128
> >     966 6
> >     733 7
> >     575 256
> >     421 20
> >     406 12
> >     339 9
> >     331 1024
> >     311 100
> >     281 42
> >     253 11
> >     226 15
> >     189 40
> >     172 24
> >     169 0xff
> >     168 13
> >     168 0x80
> >     166 512
> >     137 1.0
> >     133 14
> >     132 31
> >     129 0xDEADBEEF
> >     120 18
> >     120 17
> >     120 1000
> >     115 4096
> >     100 30
> >      94 60
> >      94 0x1234
> >      89 0x20
> >      86 0xFF
> > ```
> > 
> > 1.0 is in position 28 with 137 occurrences
> > 2.0 is in position 93 with 27 occurrences
> > 100.0 is in position 96 with 26 occurences
> > 1.0f is in position 182 with 11 occurences
> > 
> > we also have 2.0e0 four times :)
> > 
> > This data suggests that there would be value in a 
> > IgnorePowerOf2IntegerLiterals option.
> Any chance you can hack the check run on LLVM where it doesn't report any 
> integer values (I'm curious about the top ten or so for floating-point 
> values)? Additionally, it'd be great to get similar numbers from some other 
> projects, like https://github.com/qt just to see how it compares (I've used 
> `bear` to get compile_commands.json file out of Qt before, so I would guess 
> that would work here).
No need for the hack, I just grep for dot in my report:

```
    137 1.0
     27 2.0
     26 100.0
     20 0.5
     11 1.0f
      8 1.02
      7 3.0
      7 1.98
      7 1.5
      6 .5
      6 1.1
      5 0.01
      4 89.0f
      4 4294967296.f
      4 3.14159
      4 2.0e0
      4 10.0
      3 88.0f
      3 255.0
      3 127.0f
      3 12345.0f
      3 123.45
      3 0.2f
      3 0.25
      3 0.1f
      3 0.1
      2 80.0
      2 710.0f
      2 710.0
      2 709.0f
      2 6.0
      2 3.14f
      2 3.14
      2 2.5
      2 2349214918.58107
      2 149.0f
      2 14.5f
      2 1.17549435e-38F
      2 11357.0f
      2 11356.0f
      2 103.0f
      2 0.99
      2 0.9
      2 0.01f
      1 745.0f
      1 745.0
      1 7.1653228759765625e2f
      1 709.0
      1 7.08687663657301358331704585496e-268
      1 6.62E-34
      1 64.0f
      1 6.02E23
      1 4950.0f
      1 4932.0f
      1 45.0f
      1 42.42
      1 4.2
      1 4.0
      1 38.0f
      1 3.7
      1 323.0f
      1 32.0f
      1 32.0
      1 3.1415
      1 308.0f
      1 2.718
      1 2.7
      1 225.0f
      1 21.67
      1 2.0f
      1 2.088
      1 .17532f
      1 16445.0f
      1 1.616f
      1 128.0f
      1 12346.0f
      1 12.0f
      1 1.2
      1 1.1f
      1 11399.0f
      1 11383.0f
      1 1.0L
      1 1.0E+9
      1 1.0E+6
      1 1.0e-5f
      1 1.0E+12
      1 1074.0f
      1 1074.0
      1 1023.0f
      1 1023.0
      1 1.01F
      1 1.01
      1 10.0f
      1 100.
      1 0.999999
      1 0.8f
      1 .08215f
      1 0.7
      1 0.6
      1 0.5F
      1 0.5f
      1 0.59
      1 0.4f
      1 0.2
      1 0.06
      1 0.02
      1 0.005
```

I'll check out Qt shortly.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D49114



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to