Visualizzazione dei risultati da 1 a 5 su 5

Discussione: seno e coseno in php

  1. #1

    seno e coseno in php

    perchè non mi funzionano???

    vi faccio un esempio
    codice:
    	<?php
    
    	$prova=0;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=30;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=60;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=90;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=120;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=150;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=180;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=230;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=270;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=300;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    	$prova=360;
    	$res1=mysin($prova);
    	$res2=mycos($prova);
    	echo "sin di " . $prova . " = " . $res1. " 
     ";
    	echo "cos di " . $prova . " = " . $res2. " 
     ";
    
    
    	function mycos($angolo){
    	return cos(deg2rad($angolo));
    	}
    
    	function mysin($angolo){
    	return sin(deg2rad($angolo));
    }
    
    ?>

    questo è il tragico risultato...perchè?????
    codice:
     sin di 0 = 0
    cos di 0 = 1
    sin di 30 = 0.5
    cos di 30 = 0.866025403784
    sin di 60 = 0.866025403784
    cos di 60 = 0.5
    sin di 90 = 1
    cos di 90 = 6.12303176911E-17
    sin di 120 = 0.866025403784
    cos di 120 = -0.5
    sin di 150 = 0.5
    cos di 150 = -0.866025403784
    sin di 180 = 1.22460635382E-16
    cos di 180 = -1
    sin di 230 = -0.766044443119
    cos di 230 = -0.642787609687
    sin di 270 = -1
    cos di 270 = -1.83690953073E-16
    sin di 300 = -0.866025403784
    cos di 300 = 0.5
    sin di 360 = -2.44921270764E-16
    cos di 360 = 1
    grazie dell'aiuto

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    e quale sarebbe il problema?

  3. #3
    Originariamente inviato da Razorblade
    e quale sarebbe il problema?
    il problema sarebbe che il coseno di 90 è 0, non 6.12303176911E-17

    altri errori
    sin di 180 = 1.22460635382E-16
    cos di 270 = -1.83690953073E-16
    sin di 360 = -2.44921270764E-16

    i quali tendono a 0, invece che essere uguali a 0. e per i successivi calcoli che devo fare non va bene.

    il problema sta sicuramente nella codifica e nell'arrotondamento dei numeri float.
    ovviamente posso risolvere mettendo una guardia nelle funzioni mysin e mycos, ma mi chiedevo se ci fosse un modo più furbo per risolvere la situazione.

  4. #4
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Penso che questa potrebbe essere una soluzione:

    Codice PHP:

        
    function mycos($angolo){
        return 
    number_format(cos(deg2rad($angolo)),6);
        }

        function 
    mysin($angolo){
        return 
    number_format(sin(deg2rad($angolo)),6);
            } 
    Il '6' lo puoi modificare in base alle tue esigenze.
    Ciao

  5. #5
    Originariamente inviato da Razorblade
    Penso che questa potrebbe essere una soluzione:

    Codice PHP:

        
    function mycos($angolo){
        return 
    number_format(cos(deg2rad($angolo)),6);
        }

        function 
    mysin($angolo){
        return 
    number_format(sin(deg2rad($angolo)),6);
            } 
    Il '6' lo puoi modificare in base alle tue esigenze.
    Ciao
    perfetto, grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.