annotate ffmpeg/libavutil/softfloat.c @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
yading@11 1 /*
yading@11 2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
yading@11 3 *
yading@11 4 * This file is part of FFmpeg.
yading@11 5 *
yading@11 6 * FFmpeg is free software; you can redistribute it and/or
yading@11 7 * modify it under the terms of the GNU Lesser General Public
yading@11 8 * License as published by the Free Software Foundation; either
yading@11 9 * version 2.1 of the License, or (at your option) any later version.
yading@11 10 *
yading@11 11 * FFmpeg is distributed in the hope that it will be useful,
yading@11 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@11 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@11 14 * Lesser General Public License for more details.
yading@11 15 *
yading@11 16 * You should have received a copy of the GNU Lesser General Public
yading@11 17 * License along with FFmpeg; if not, write to the Free Software
yading@11 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@11 19 */
yading@11 20
yading@11 21 #include <inttypes.h>
yading@11 22 #include <stdio.h>
yading@11 23 #include <assert.h>
yading@11 24 #include "softfloat.h"
yading@11 25 #include "common.h"
yading@11 26 #include "log.h"
yading@11 27
yading@11 28 #undef printf
yading@11 29
yading@11 30 int main(void){
yading@11 31 SoftFloat one= av_int2sf(1, 0);
yading@11 32 SoftFloat sf1, sf2;
yading@11 33 double d1, d2;
yading@11 34 int i, j;
yading@11 35 av_log_set_level(AV_LOG_DEBUG);
yading@11 36
yading@11 37 d1= 1;
yading@11 38 for(i= 0; i<10; i++){
yading@11 39 d1= 1/(d1+1);
yading@11 40 }
yading@11 41 printf("test1 double=%d\n", (int)(d1 * (1<<24)));
yading@11 42
yading@11 43 sf1= one;
yading@11 44 for(i= 0; i<10; i++){
yading@11 45 sf1= av_div_sf(one, av_normalize_sf(av_add_sf(one, sf1)));
yading@11 46 }
yading@11 47 printf("test1 sf =%d\n", av_sf2int(sf1, 24));
yading@11 48
yading@11 49
yading@11 50 for(i= 0; i<100; i++){
yading@11 51 START_TIMER
yading@11 52 d1= i;
yading@11 53 d2= i/100.0;
yading@11 54 for(j= 0; j<1000; j++){
yading@11 55 d1= (d1+1)*d2;
yading@11 56 }
yading@11 57 STOP_TIMER("float add mul")
yading@11 58 }
yading@11 59 printf("test2 double=%d\n", (int)(d1 * (1<<24)));
yading@11 60
yading@11 61 for(i= 0; i<100; i++){
yading@11 62 START_TIMER
yading@11 63 sf1= av_int2sf(i, 0);
yading@11 64 sf2= av_div_sf(av_int2sf(i, 2), av_int2sf(200, 3));
yading@11 65 for(j= 0; j<1000; j++){
yading@11 66 sf1= av_mul_sf(av_add_sf(sf1, one),sf2);
yading@11 67 }
yading@11 68 STOP_TIMER("softfloat add mul")
yading@11 69 }
yading@11 70 printf("test2 sf =%d (%d %d)\n", av_sf2int(sf1, 24), sf1.exp, sf1.mant);
yading@11 71 return 0;
yading@11 72 }