Вот еще одна реализация strtok()
, которая имеет возможность распознавать последовательные разделители (в стандартной библиотеке strtok()
этого нет)
Эта функция является частью лицензированной библиотеки BSD, называемой zString . Вы более чем можете внести свой вклад:)
https://github.com/fnoyanisi/zString
char *zstring_strtok(char *str, const char *delim) {
static char *static_str=0; /* var to store last address */
int index=0, strlength=0; /* integers for indexes */
int found = 0; /* check if delim is found */
/* delimiter cannot be NULL
* if no more char left, return NULL as well
*/
if (delim==0 || (str == 0 && static_str == 0))
return 0;
if (str == 0)
str = static_str;
/* get length of string */
while(str[strlength])
strlength++;
/* find the first occurance of delim */
for (index=0;index
Как упоминалось в предыдущих сообщениях, поскольку strtok()
или тот, который я вложил выше, полагается на переменную static *char
, чтобы сохранить местоположение последнего разделителя между последовательными вызовами, следует проявлять особую осторожность при работе с многопоточными приложениями.
Не используйте стандартную функцию Cos
- как многие люди сказали, для использования этого необходимо уже знать значение пи, потому что это берет свой аргумент в радианах.
тригонометрические функции Большинства языков программирования используют радианы в качестве своих аргументов . Это вызвано тем, что существуют хорошие, простые формулы для приближения аккуратного. функции, если Вы используете радианы.
В любом случае, хотя, здесь Вам не нужен он! Вы удваиваете значение n
каждый раз, таким образом, можно использовать известную полуугловую формулу для косинуса:
package main
import "fmt"
import "math"
func main() {
cosVal := float64(-1) // Start at cosine of 180 degrees
for n := 4 ; n < 5000; n *= 2 {
fmt.Println(n)
cosVal = math.Sqrt(0.5 * (cosVal + 1.0))
c := math.Pow(0.5 - 0.5*cosVal, 0.5)
fmt.Println(c * float64(n))
}
}
Это сходится, как желаемый.
<час> Кстати, примечание, что первоначально Вы хотели что-то, что сходилось к половине круга в радианах (то есть, к пи), но вместо этого получило что-то, что сходилось к половине круга в градусах (то есть, к 180). Это точно, потому что Вы вручили градусы Cos
, когда необходимо было вручить ему радианы.