25.09.2020 12:31, Max Reitz wrote:
> On 18.09.20 20:19, Vladimir Sementsov-Ogievskiy wrote:
>> Introduce dynamic float precision and use percentage to show delta.
>>
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>> scripts/simplebench/simplebench.py | 26 +++++++++++++++++++++++++-
>> 1 file changed, 25 insertions(+), 1 deletion(-)
>>
>> diff --git a/scripts/simplebench/simplebench.py b/scripts/simplebench/simplebench.py
>> index 716d7fe9b2..56d3a91ea2 100644
>> --- a/scripts/simplebench/simplebench.py
>> +++ b/scripts/simplebench/simplebench.py
>> @@ -79,10 +79,34 @@ def bench_one(test_func, test_env, test_case, count=5, initial_run=True):
>> return result
>>
>>
>> +def format_float(x):
>> + res = round(x)
>> + if res >= 100:
>> + return str(res)
>> +
>> + res = f'{x:.1f}'
>> + if len(res) >= 4:
>> + return res
>> +
>> + return f'{x:.2f}'
>
> This itches me to ask for some log() calculation.
>
> Like:
>
> %.*f' % (math.ceil(math.log10(99.95 / x)), x)
>
Oh yes, that's cool.
>
>> +def format_percent(x):
>> + x *= 100
>> +
>> + res = round(x)
>> + if res >= 10:
>> + return str(res)
>> +
>> + return f'{x:.1f}' if res >= 1 else f'{x:.2f}'
>
> Same here. (Also, why not append a % sign in this function?)
OK
>
>> def ascii_one(result):
>> """Return ASCII representation of bench_one() returned dict."""
>> if 'average' in result:
>> - s = '{:.2f} +- {:.2f}'.format(result['average'], result['delta'])
>> + avg = result['average']
>> + delta_pr = result['delta'] / avg
>> + s = f'{format_float(avg)}±{format_percent(delta_pr)}%'
>
> Pre-existing, but isn’t the ± range generally assumed to be the standard
> deviation?
>
Hmm. Actually, why not, let's just use standard deviation. I wanted to show maximum deviation, not mean, to not miss some bugs in experiment (big deviation of one test run). Still, seems standard deviation is good enough in it.
>
>> if 'n-failed' in result:
>> s += '\n({} failed)'.format(result['n-failed'])
>> return s
>>
>
>
--
Best regards,
Vladimir