Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Home
- Knowledge
- Question Forum
- Using IF statements in Formula Questions

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

05-02-2017
08:58 AM

Hello, I'm somewhat new to using Canvas for quizzes and am trying to make a formula question. Without getting into too many details, the question will provide two variables, x and y. If 3x < y, the question will have one answer, and if 3x > y, the question will have another. I was planning to use the IF function to help with this. There may be a more elegant method, but I was thinking that if 3x < y, the statement could return one value, and if it didn't, it could return another. However, I cannot seem to find any guides or help on how to use this function, and all my attempts to do it keep giving me errors like "unrecognized token at 8" or "unexpected equals at 5". Can anyone point me in the right direction? I've been trying to use the statement if(3x<y,1,0). I thought that if the first statement were true, it would return 1, and if not, it would return 0. THANKS!

Solved! Go to Solution.

2 Solutions

Accepted Solutions

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Not the Solution
- Email to a Friend
- Report Inappropriate Content

05-02-2017
09:24 AM

Somewhere, there's a lengthy discussion about using formulas with IF (I probably contributed heavily to it), but I don't remember where, so I'll try a short explanation here and hopefully someone can find the other one if necessary.

The IF() function needs a boolean condition, a *true* or a *false*. Mathematically, those are normally 1 and 0, but anything other than 0 is considered true.

You can not use relational operators like < or >.

The logic here gets a little convoluted

- If 3x < y then 3x - y < 0. If 3x > y then 3x - y > 0.
- The signum(x) function, often written as SIGN(x), returns -1 if x < 0, +1 if x > 0, and 0 if x = 0.
- SIGN(3x-y) is -1 when 3x<y, +1 when 3x>y, and 0 when 3x=y
- Both -1 and +1 are considered true
- 1+SIGN(3x-y) is 0 (false) when 3x<y, 2 (true) when 3x>y, and 1 (true) when 3x=y
- SIGN(3x-y)-1 is -2 (true) when 3x<y, 0 (false) when 3x>y, and -1 (true) when 3x=y
- Canvas does not have the SIGN(x) function, so you have to create your own. SIGN(x)=x/ABS(x)
- 1+(3x-y)/ABS(3x-y) is 0 (false) when 3x<y, 2 (true) when 3x>y, and undefined because you get division by 0 when 3x=y
- To avoid division by 0, first check to see if 3x=y or 3x-y=0 (false) or not zero (true).
- Nest the check for less than inside the check for equality

**IF(3x-y,IF(1+(3x-y)/ABS(3x-y), do_when_3x>y,do_when_3x<y),do_when_3x=y)**

Replace the *do_when_* blocks with whatever formula you need.

If you can guarantee that 3x is never y, then you can omit the outside IF() and just use the inner.

IF(1+(3x-y)/ABS(3x-y),*do_when_3x>y*,*do_when_3x<y*)

I would include both since it doesn't cost any extra except at the time you generate the question.

** **

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Not the Solution
- Email to a Friend
- Report Inappropriate Content

03-29-2020
08:40 PM

There is a simple way to solve this problem:

To test if A > B just do:

if ( (A-B)+abs(A-B), {case A > B}, {case A<=B})

No division required.

Jorge Sampaio

3 Replies

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Not the Solution
- Email to a Friend
- Report Inappropriate Content

05-02-2017
09:24 AM

Somewhere, there's a lengthy discussion about using formulas with IF (I probably contributed heavily to it), but I don't remember where, so I'll try a short explanation here and hopefully someone can find the other one if necessary.

The IF() function needs a boolean condition, a *true* or a *false*. Mathematically, those are normally 1 and 0, but anything other than 0 is considered true.

You can not use relational operators like < or >.

The logic here gets a little convoluted

- If 3x < y then 3x - y < 0. If 3x > y then 3x - y > 0.
- The signum(x) function, often written as SIGN(x), returns -1 if x < 0, +1 if x > 0, and 0 if x = 0.
- SIGN(3x-y) is -1 when 3x<y, +1 when 3x>y, and 0 when 3x=y
- Both -1 and +1 are considered true
- 1+SIGN(3x-y) is 0 (false) when 3x<y, 2 (true) when 3x>y, and 1 (true) when 3x=y
- SIGN(3x-y)-1 is -2 (true) when 3x<y, 0 (false) when 3x>y, and -1 (true) when 3x=y
- Canvas does not have the SIGN(x) function, so you have to create your own. SIGN(x)=x/ABS(x)
- 1+(3x-y)/ABS(3x-y) is 0 (false) when 3x<y, 2 (true) when 3x>y, and undefined because you get division by 0 when 3x=y
- To avoid division by 0, first check to see if 3x=y or 3x-y=0 (false) or not zero (true).
- Nest the check for less than inside the check for equality

**IF(3x-y,IF(1+(3x-y)/ABS(3x-y), do_when_3x>y,do_when_3x<y),do_when_3x=y)**

Replace the *do_when_* blocks with whatever formula you need.

If you can guarantee that 3x is never y, then you can omit the outside IF() and just use the inner.

IF(1+(3x-y)/ABS(3x-y),*do_when_3x>y*,*do_when_3x<y*)

I would include both since it doesn't cost any extra except at the time you generate the question.

** **

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Accept as Solution
- Email to a Friend
- Report Inappropriate Content

05-02-2017
09:33 AM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Not the Solution
- Email to a Friend
- Report Inappropriate Content

03-29-2020
08:40 PM

There is a simple way to solve this problem:

To test if A > B just do:

if ( (A-B)+abs(A-B), {case A > B}, {case A<=B})

No division required.

Jorge Sampaio

Related Topic

- Better quiz layout for multiple-choice questions with a question stem? in Question Forum
- Do decimal places show correctly in Next Quizzes? in Question Forum
- Formula Questions in Question Forum
- Formula Questions - Javascript, Restrictions with Question Type in Question Forum
- How to use sine inverse ; cos inverse and tan inverse in a formula question in Question Forum

- Reference
- Community Guidelines
- Security
- Developers
- Open Source